自然排序接口 Comparable 重写方法 compareTo ,使用:存储的元素需要实现这个接口
TreeSet<Person> ts = new TreeSet<>();
如果这个集合存储的是Person对象,那就需要在Person这个类中实现Comparable接口,并重写compareTo方法
eg:
public class Person implements Comparable<Person>{
//此处省略 属性,构造方法,get、set方法等
@Override
public int compareTo(Person o) { //this在前是正序,如:123 abc
int num = this.age - o.age;
return num == 0 ? this.name.compareTo(o.name) : num;
}
比较器接口 Comparator 重写方法 compare ,使用:创建集合对象,作为参数传进去
使用比较器时,这个Person类中可以不实现Comparable接口,但是在创建集合的时候需要传参数
参数就是Comparator的子类对象
eg:
TreeSet<Person> ts2 = new TreeSet<Person>(new Comparator<Person>() {
@Override
public int compare(Person p1, Person p2) {//p1在前是正序,如:123 abc
int num = p2.getAge() - p1.getAge();
return num == 0 ? p1.compareTo(p2) : num;
}
});
*是否可以同时使用自然排序和比较器 ? 可以,优先使用比较器。
List 和 Set :
1.List
a.普通for循环, 使用get()逐个获取
b.调用iterator()方法得到Iterator, 使用hasNext()和next()方法
c.增强for循环, 只要可以使用Iterator的类都可以用
d.Vector集合可以使用Enumeration的hasMoreElements()和nextElement()方法
2.Set
a.调用iterator()方法得到Iterator, 使用hasNext()和next()方法
b.增强for循环, 只要可以使用Iterator的类都可以用