BitSet保存用户属性小例子

来源:互联网 发布:linux文件权限第三段 编辑:程序博客网 时间:2024/06/12 01:14
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);    }}

原创粉丝点击