ArrayList数组要进行排序的时候可以通过Collections.sort()方法完成,如
List<T> n=new ArrayList<T>();
Collections.sort(n);
注意这里的T不能是你自己定义的类,可以是String、Integer等一些常用类
要是你希望对自己写的类进行排序的时候必须要使用Comparable这个接口,而且必须重写compareTo()方法(让sort()根据你指定的变量排序,不然sort()不知道怎么排序)
class Name implements Comparable<Name>{
private String name;
private int num;
public Name(String name,int num) {
// TODO Auto-generated constructor stub
this.name=name;
this.num=num;
}
public String getName(){
return name;
}
public int getNum(){
return num;
}
@Override
public int compareTo(Name o) {
// TODO Auto-generated method stub
return name.compareTo(o.name);
}
public String toString(){
return name;
}
}
public class Test {
public Test() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
// TODO Auto-generated method stub
List<Name> n=new ArrayList<Name>();
n.add(new Name("张三", 7));
n.add(new Name("王五", 4));
n.add(new Name("李四", 8));
n.add(new Name("赵六", 1));
Collections.sort(n);//这里是根据name值进行排序
System.out.println(n);
}
}
控制台输出结果
[张三, 李四, 王五, 赵六]
当然,上面程序是根据Name这个类中的name变量进行排序的,但如果我们还需要一组根据num变量排序的数组时,这时我们就会使用到Comparator这个接口了
class Name implements Comparable<Name>{
private String name;
private int num;
public Name(String name,int num) {
// TODO Auto-generated constructor stub
this.name=name;
this.num=num;
}
public String getName(){
return name;
}
public int getNum(){
return num;
}
@Override
public int compareTo(Name o) {
// TODO Auto-generated method stub
return name.compareTo(o.name);
}
public String toString(){
return name;
}
}
//由于Name类,排序的话是根据name来排序,如过还需要一个跟据num排序的,则一个Name显然不够,故在创建一个新类,所以我们定义一个外部类
class NameSecond implements Comparator<Name>{
@Override
public int compare(Name o1, Name o2) {
// TODO Auto-generated method stub
return o1.getNum()-o2.getNum();//要比较int类型只需相减即可
}
}
public class Test {
public Test() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
// TODO Auto-generated method stub
List<Name> n=new ArrayList<Name>();
n.add(new Name("张三", 7));
n.add(new Name("王五", 4));
n.add(new Name("李四", 8));
n.add(new Name("赵六", 1));
Collections.sort(n);//这里是根据name值进行排序
System.out.println(n);
NameSecond second=new NameSecond();
Collections.sort(n,second);//这里是根据num值进行排序,Collection.sort()不能对Set进行排序
System.out.println(n);
}
}
控制台输出
[张三, 李四, 王五, 赵六]
[赵六, 王五, 张三, 李四]