有两种方法,一种是集合内的对象实现了comparable接口的compareTo;一种是在sort方法中传一个实现了compartor接口的类。
1.以String实现的compartTo方法为例:
//实现的是按字母顺序排序
public int compareTo(String anotherString) {
int len1 = value.length;
int len2 = anotherString.value.length;
int lim = Math.min(len1, len2);
char v1[] = value;
char v2[] = anotherString.value;
int k = 0;
while (k < lim) {
char c1 = v1[k];
char c2 = v2[k];
if (c1 != c2) {
//返回负数代表another应该在前面;大于等于零的数表示本字符串在前面
return c1 - c2;
}
k++;
}
return len1 - len2;
}
2.实现一个compartor接口
class person{
String name;
int age;
person(String name,int age){
this.name=name;
this.age=age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
public class Collections_P {
public static void main(String[] args){
person p1=new person("leilei",18);
person p2=new person("hauhua",1);
person p3=new person("danny",1);
ArrayList<person> persons=new ArrayList<person>();
persons.add(p1);
persons.add(p2);
persons.add(p3);
for(person person:persons){
System.out.println(person.toString());
}
Collections.sort(persons, new Comparator<person>() {
@Override
public int compare(person o1, person o2) {
return o1.getName().compareTo(o2.getName());
}
});
for(person person:persons){
System.out.println(person.toString());
}
}
}