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);
}
}
BitSet保存用户属性小例子
最新推荐文章于 2021-02-27 20:32:17 发布