类java.util.Collections提供了一些静态方法基于List容器的一些算法
排序 voidsort(List)
逆序 void reverse(List)
随机 void shuffle(List)
折半查找 (先升序排列) intbinarySearch(List,Object)
public class Test {
public static void main(String[] args) {
m1();
}
public static void m1() {
List list = new Arraylist();
for (int i=0;i<5;i++) {
//Random类,产生随机数
Random r = new Random();
//nextInt(int n) 产生0~n-1之间的随机整数
list.add(r.nextInt(100));
}
System.out.println("原始数据"+list);
Collections.sort(list);
System.out.println("sort:"+list); // 默认升序
Collections.reverse(list); // 逆序
System.out.println("reverse:"+list); // 降序
Collections.shuffle(list); // 随机排序
System.out.println("shuffle:"+list);
}
}
5.comparable接口
java.lang.Comparable 不用导入
public class Test {
public static void main(String[] args) {
m1();
m2();
}
public static void m1() {
List list = new ArrayList();
list.add("Tom");
list.add("Mike");
list.add("Joke");
Collections.sort(list);
System.out.println(list); // [Joke Mike Tom]
}
public static void m2() {
List list = new ArrayList();
list.add(new Person("zhang","san"));
list.add(new Person("li","si"));
list.add(new Person("wang","wu"));
Collections.sort(list);
System.out.println(list); //抛异常了~!
}
}
出错的原因:sort()排序方法,排序即比较排序对象的“大小, 那么sort()抛异常,可能的原因是不能确定待排序对象的“大小”
为什么不知道大小:
约定如果“对象”之间比较大小,那么该对象所属的类必须实现comparable接口
并重写booleancomparaTo()方法
也就是说两个对象大小的比较,由comparaTo()的返回值决定
即String类实现了Comparable接口,并实现了comparaTo(),在该方法中定义了两个字符串对象大小的比较
源码:public int comparaTo(String anotherString) {
< 0 当前对象 小于 参数对象
= 0 当前对象 等于 参数对象
> 0 当前对象 大于 参数对象
}
class Person implements Comparable {
private String firstName;
private String lastName;
public Person(String firstName,String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public int comparaTo(Object antherPerson) {
Person antherPerson = (Person) obj;
if (firstName.comparaTo(antherPerson.firstName) == 0) {
return lastName.comparaTo(antherPerson.lastName);
} else {
return firstName.comparaTo(antherPerson.firstName);
}
}
public String toString() {
return firstName + "," + lastName;
}
}