一:用法
@Test
public void treeSetTest(){
TreeSet<Integer> treeSet = new TreeSet<Integer>();
treeSet.add(5);
treeSet.add(6);
treeSet.add(3);
treeSet.add(2);
treeSet.add(4);
treeSet.add(5);
//先用Integer类型的测试,TreeSet会剔除相同的
//打印
System.err.println(treeSet);
}
打印结果:
[2, 3, 4, 5, 6]
2.1:TreeSet原理
唯一性原理
add(v)方法调用Map的put方法 ,用V做key,Map中保持key的唯一性
private static final Object PRESENT = new Object();
public boolean add(E e) {
return m.put(e, PRESENT)==null;
}
自定义对象排序,用自然排序,重写compareTo方法,被排序的对象实现compareTo方法,先对名称进行比较,如果name相同,就会对id进行比较,TreeSet底层调用compareTo方法进行排序
@Test
public void treeSetTest(){
TreeSet treeSet = new TreeSet<>();
treeSet.add(new Customer(5,"zhangsan"));
treeSet.add(new Customer(5,"zhangsan"));
treeSet.add(new Customer(7,"lisi"));
treeSet.add(new Customer(3,"anxi"));
treeSet.add(new Customer(8,"basa"));
System.err.println(treeSet);
}
class Customer implements Comparable<Customer>{
private Integer id;
private String name;
public Customer(Integer id,String name){
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "Customer{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
@Override
public int compareTo(Customer c){
int i = this.name.compareTo(c.name);
return i==0 ? this.getId().compareTo(c.id) : i;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}