Collection类
2、Comparable接口:可以认为是内比较器,当实现了这个接口,则表示这个类可以和自己比较大小,可以进行自然排序,如果一个类要实现这个接口,那必然要实现它的compareTo()方法。String, Integer等类实现了这个接口,实现了compareTo方法。实现了Comparable接口的list或数组可以使用Collections.sort()或者Arrays.sort()方法进行排序。接口定义如下:
public interface Comparable<T>
{ public int compareTo(T o); }
public class Person {
String name;
int age;
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
现在有两个Person类的对象,我们如何来比较二者的大小呢?我们可以通过让Person实现Comparable接口:
public class Person implements Comparable<Person> {
String name;
int age;
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public int compareTo(Person p) {
return this.age - p.getAge();
}
public static void main(String[] args) {
Person p1 = new Person("xujian", 29);
Person p2 = new Person("xiewei", 10);
List<Person> personList = new ArrayList<>();
personList.add(p1);
personList.add(p2);
Collections.sort(personList);
}
}
3、Comparator接口:我们如果需要控制某个类的次序,而该类本身不支持排序(即没有实现Comparable接口),那么我们就可以建立一个“该类的比较器”来进行排序,这个“比较器”只需要实现Comparator接口即可。也就是说,我们可以通过实现Comparator来新建一个比较器,常用方式:Collections.sort(list, xxxComparator())
public interface Comparator<T>
{
int compare(T o1, T o2);
boolean equals(Object obj);
}
Comparable和Comparator区别比较
Comparable是排序接口,若一个类实现了Comparable接口,就意味着“该类支持排序”。而Comparator是比较器,我们若需要控制某个类的次序,可以建立一个“该类的比较器”来进行排序。
Comparable相当于“内部比较器”,而Comparator相当于“外部比较器”。
两种方法各有优劣, 用Comparable 简单, 只要实现Comparable 接口的对象直接就成为一个可以比较的对象,但是需要修改源代码。 用Comparator 的好处是不需要修改源代码, 而是另外实现一个比较器, 当某个自定义的对象需要作比较的时候,把比较器和对象一起传递过去就可以比大小了, 并且在Comparator 里面用户可以自己实现复杂的可以通用的逻辑,使其可以匹配一些比较简单的对象,那样就可以节省很多重复劳动了。
4、Collection和Collections的区别
Collection是集合的接口,直接继承它的接口有List,Set,Queue等。
Collections是一个工具类,提供一系列静态方法对集合中元素进行排序搜索等操作。Collections.sort(list)升序排序 Collections.shuffling(list)混排
Collections.reverse(list)反转
Collections.sort(List<T> list)底层调用了Arrays.sort()方法

Arrays.sort()如果数组长度>=286且连续性好的话,用归并排序,如果在47和286之间的话,用快速排序,如果长度小于47就用插入排序
5、List和set都属于Collection,Collection有iterator方法,所以List和set都可以用iterator方法,而Map不属于Collection,没有此方法,想遍历就要使用entrySet方法。
浙公网安备 33010602011771号