package naturalsorting;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
class Person implements Comparable {
private String name;
public Person(String name) {
this.name = name;
}
@Override
public int compareTo(Person person) {
if (name.length() > person.name.length())
return 1;
else if (name.length() < person.name.length())
return -1;
return name.compareTo(person.name);
}
public String toString() {
return "Person [name=" + name + "]";
}
}
public class App {
public static void main(String[] args) {
List<Person> list = new ArrayList<>();
Set<Person> set = new TreeSet<>();
add(list);
add(set);
System.out.println(list);
System.out.println(set);
Collections.sort(list);
System.out.println(list);
System.out.println(set);
}
private static void add(Collection<Person> collection) {
collection.add(new Person("Mark"));
collection.add(new Person("John"));
collection.add(new Person("Sarah"));
}
}
如果想调用Collections这个类,像类似于String和Integer那样排序的话,需要在自定义的类中使用泛型,也就是一个接口,这个接口是Comparable<>,它与Comparator<>,没有很大的区别,只不过是其中的函数参数个数不同,导致Comparator<>需要单独创建一个类来使用。
所有的容器都是Collection这个“父类”的“子类”。这样说并不准确,因为Collection<>是一个接口,是泛型,但是初学时,感觉这种关系类似与Object类与其他所有类的关系。