BitSet保存用户属性小例子

import com.google.common.collect.Lists;
import org.apache.commons.lang.builder.ToStringBuilder;
import java.util.BitSet;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class BitSetDemo {
    static int ageStartIndex = 0;
    static int ageEndIndex = 99;
    static int sexIndex = 100;
    static int gradeStartIndex = 101;
    static int gradeEndIndex = 109;
    static BitSet sexToCompare = new BitSet(1);
    static Map<Integer, BitSet> personAttrsMap = new HashMap<Integer, BitSet>();

    public static void main(String[] args) {
        List<Person> persons = init();
        display(persons);
        for(Person person: persons){
            BitSet attr = new BitSet(128);
            setSex(attr, person.getSex());
            setGrade(attr, person.getGrade());
            personAttrsMap.put(person.getId(), setAge(attr, person.getAge()));
            int grade = getGrade(attr);
            int age = getAge(attr);
            String sex = getSex(attr);
            System.out.println("ID = " + person.getId() + ",Grade = " + person.getGrade()+"|"+grade+",Age = "+person.getAge()+"|"+age+",Sex = "+person.getSex()+"|"+sex);
        }
    }

    public static BitSet setAge(BitSet bitSet, int age){
        bitSet.set(age - 1);
        System.out.println(bitSet);
        return bitSet;
    }

    public static String getSex(BitSet bitSet){
        BitSet sexBitSet = bitSet.get(sexIndex, sexIndex + 1);
        sexBitSet.and(sexToCompare);
        if(sexBitSet.cardinality() > 0){
            return "male";
        }
        return "female";
    }

    public static BitSet setGrade(BitSet bitSet, int grade){
        bitSet.set(grade + gradeStartIndex - 1);
        System.out.println(bitSet);
        return bitSet;
    }

    public static BitSet setSex(BitSet bitSet, int sex){
        bitSet.set(sexIndex, sex == 1);
        System.out.println(bitSet);
        return bitSet;
    }

    public static int getGrade(BitSet bitSet){
        BitSet gradeBitSet = bitSet.get(gradeStartIndex,gradeEndIndex + 1);
        if(gradeBitSet.cardinality() > 0){
            return gradeBitSet.nextSetBit(0) + 1;
        }
        return -1;
    }

    public static int getAge(BitSet bitSet){
        BitSet ageBitSet = bitSet.get(ageStartIndex,ageEndIndex + 1);
        if(ageBitSet.cardinality() > 0){
            return ageBitSet.nextSetBit(0) + 1;
        }
        return -1;
    }

    public static List<Person> init(){
        sexToCompare.set(0);
        List<Person> persons = Lists.newArrayList();
        Person p1 = new Person(1,5,1,4);
        Person p2 = new Person(2,6,0,5);
        Person p3 = new Person(3,7,1,6);
        Person p4 = new Person(4,100,0,9);
        persons.add(p1);
        persons.add(p2);
        persons.add(p3);
        persons.add(p4);
        return persons;
    }

    public static void display(List<Person> persons){
        for(Person p:persons){
            System.out.println(p);
        }
    }

}

class Person{
    private Integer id;
    private int age; // from 1 to 100
    private int sex; // 1-male 0-female
    private int grade; // from 1 to 9

    public Person(Integer id, int age, int sex, int grade){
        this.id = id;
        this.age = age;
        this.grade = grade;
        this.sex = sex;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getSex() {
        return sex;
    }

    public void setSex(int sex) {
        this.sex = sex;
    }

    public int getGrade() {
        return grade;
    }

    public void setGrade(int grade) {
        this.grade = grade;
    }

    @Override
    public String toString() {
        return ToStringBuilder.reflectionToString(this);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值