List
students.add(songchao);
students.add(wuxing);
students.add(songchao2);
for(Studentstudent : students) {
System.out.println("Name " + student.getName() + " ID " + student.getId());
}
System.out.println();
Collections.sort(students);
for(Studentstudent : students) {
System.out.println("Name " + student.getName() + " ID " + student.getId());
}
}
}
输出结果如下:
[java]
Name SongChao ID 100150
Name WuXing ID 100121
Name SongChao ID 100130
Name SongChao ID 100130
Name SongChao ID 100150
Name WuXing ID 100121
1.1.2另外一种方式:直接使用比较器comparator
直接使用比较器的情况下,Student类不必继承Comparable接口,当然也不必实现compareTo方法。
直接看调用代码,但是注意一点,这里的Student类没有继承Comparable接口。
直接在上面的客户端代码中,把Collections.sort方法替换为:
[java]
Collections.sort(students, newComparator
@Override
public int compare(Student arg0,Student arg1) {
if(arg0.getName().compareTo(arg1.getName())== 0) {
return Integer.valueOf(arg0.getId()).compareTo(Integer.valueOf(arg1.getId()));
} else {
returnarg0.getName().compareTo(arg1.getName());
}
}
});
输出结果和第一种方式相同。
还有一个注意点,那就是排序的顺序,是按照由小到大还是由大到小。上面那种方式显然是从小到大排序,那么如何从大到小排序?只要改变参数顺序即可:
[java]
Collections.sort(students,newComparator
@Override
public int compare(Student arg0,Student arg1) {
if(arg1.getName().compareTo(arg0.getName()) == 0) {
return Integer.valueOf(arg1.getId()).compareTo(Integer.valueOf(arg0.getId()));
}else{
return arg1.getName().compareTo(arg0.getName());
}
}
});
以上是对于sort方法的小总结,Arrays中的sort方法类似。
第二节 Collections与Arrays概念分析
1.2.1 Collection和Collections的区别
Collection是java.util下的接口,是各种集合结构的父接口。继承它的接口主要有Set和List。
Collections是java.util下的专用静态类,包含有各种有关集合操作的静态方法。提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
1.2.2 Array与Arrays的区别
Arrays也是一个静态类,专门用来操作array,提供搜索、排序等静态方法,还提供一个允许把数组当作列表查看的静态工厂方法asList。
第三节 其它常用方法总结(第四节为使用中容易出现错误的方法介绍,第五节源代码)
1.3.1 Collections中的常用方法
java.util.Collections提供了一些静态方法实现了基于list容器的一些常用算法:
1) addAll(Collection c, T… elements);//将所有指定的元素添加到指定的collection中。
2) void sort(List);//对list容器里的元素进行排序
3) void reverse(List);//对List容器对象进行逆序排序
4) void copy(Listdest,List src)//将List src容器里的内容全部拷贝到List dest容器中
5) int binarySearch(List,Object)//对于顺序的List容器中采用折半查找的方法查找特定的对象
6) boolean disjoint(Collection c1, Collection c2);//如果两个指定的collection中没有相同的元素,返回true。
7) fill(List list, T obj); // 使用指定元素替换指定列表中的所有元素。
8) int frequency(Collection c, Object o);//返回指定的Collection中对于指定对象的元素数。
9) inde