1.向TreeSet中添加的元素必须是同一个类的
2.可以按照添加进集合中的元素的指定的顺序遍历。像String,包装类等默认按照从小到大的顺序遍历
3.当向TreeSet中添加自定义类的对象时,有两种排序方法:自然排序、定制排序
4.自然排序:要求自定义类实现java.lang.Comparable接口并重写compareTo(Object obj),在此方法中,指名按照自定义类的那个属性进行排序
5 向TreeSet中添加元素时,首先按照compareTo()进行比较,一旦返回0,虽然仅是两个对象属性值相同,但是程序会认为这两个对象是相同的,进而后一个对象不能添加进来。
6 TreeSet先执行compareto方法,再执行hashcode和equals方法,所以compareTo()与hashcode()与equals()三者保持一致
7
package lianxi2; import java.util.Set; import java.util.TreeSet; import org.junit.Test; public class TestTreeSet { @Test public void testTreeSet(){ Set set = new TreeSet(); set.add(new Student(1001,"huhu")); //重写了equals和hashcode方法 set.add(new Student(1003,"gx")); set.add(new Student(1007,"safd")); set.add(new Student(1005,"gas")); set.add(new Student(1005,"cxz")); System.out.println(set.size()); System.out.println(set); } }
结果:
5
[Student [id=1001, name=huhu], Student [id=1003, name=gx], Student [id=1005, name=cxz], Student [id=1005, name=gas], Student [id=1007, name=safd]]
@Override public int compareTo(Object o){ if(o instanceof Student){ Student s = (Student)o; //return this.name.compareTo(s.name);//按name属性从低到高排序 //return this.id - s.id; //按id属性从小到大排序 int i = this.id - s.id; if(i==0){ return this.name.compareTo(s.name); } else{ return i; } } return 0; //如果不是Student类的对象,不能加入 }