Collection类

1、List<E>, Queue<E>, Set<E>的父接口。

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、CollectionCollections的区别

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方法。

 

posted @ 2023-02-09 20:02  MarkLeeBYR  阅读(28)  评论(0)    收藏  举报