您的位置:首页 > 编程语言 > Java开发

Java List排序

2016-07-20 11:02 411 查看
1. List排序是我们经常用到的。
2. 2种方法
collections.sort(List<T> list)
//对list进行升序排列. 列表中所有的元素必须执行了Comparable接口 ,即列表中所有的元素都是可以相互 比较的(e1.compareTo(e2)。util实现的排序方法是稳定排序
collections.sort(List<T> list, Comparator<? super T> c)
//可以自定义排序(自定义排序顺序,可以降序升序)
3. 举例
//方法1,list中对象试想comparable接口
class Stu implements Comparable<Stu>
{
String name;
int age;
public Stu(String name, int age) {
// TODO Auto-generated constructor stub
this.name = name;
this.age = age;
}

public void print(){
System.out.println(age + "\t" + name);
}

@Override
public int compareTo(Stu o) {
// TODO Auto-generated method stub
int num = age - o.age;
if(num == 0){
return name.compareTo(o.name);
}
return num;
}
public static void main(String[] args) {
List<Stu> list = new ArrayList<>();
Stu e1 = new Stu("a", 10);
list.add(e1);
Stu e2 = new Stu("a", 11);
list.add(e2);
Stu e3 = new Stu("b", 10);
list.add(e3);
Collections.sort(list);
for(Stu e : list)
{
e.print();
}
}
}

//方法2重载Collections.sort()函数
class Stu
{
String name;
int age;
public Stu(String name, int age) {
// TODO Auto-generated constructor stub
this.name = name;
this.age = age;
}

public void print(){
System.out.println(age + "\t" + name);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
List<Stu> list = new ArrayList<>();
Stu e1 = new Stu("a", 10);
list.add(e1);
Stu e2 = new Stu("a", 11);
list.add(e2);
Stu e3 = new Stu("b", 10);
list.add(e3);
Collections.sort(list, new Comparator<Stu>() {
public int compare(Stu o1, Stu o2)
{
int num = o1.age - o2.age;
if(num == 0){
return o1.name.compareTo(o2.name);
}
return num;
};
});
for(Stu e : list)
{
e.print();
}
}
}

其实Collections.sort()函数的内部实现是调用list.sort()函数->将list变为数组toArray()->对数组排序Arrays.sort()
即上面也可以改为
public static void main(String[] args) {
// TODO Auto-generated method stub
List<Stu> list = new ArrayList<>();
Stu e1 = new Stu("a", 10);
list.add(e1);
Stu e2 = new Stu("a", 11);
list.add(e2);
Stu e3 = new Stu("b", 10);
list.add(e3);
list.sort(new Comparator<Stu>() {
public int compare(Stu o1, Stu o2)
{
int num = o1.age - o2.age;
if(num == 0){
return o1.name.compareTo(o2.name);
}
return num;
};
});
for(Stu e : list)
{
e.print();
}
}
或者
public static void main(String[] args) {
// TODO Auto-generated method stub
List<Stu> list = new ArrayList<>();
Stu e1 = new Stu("a", 10);
list.add(e1);
Stu e2 = new Stu("a", 11);
list.add(e2);
Stu e3 = new Stu("b", 10);
list.add(e3);
Stu[] array = (Stu[]) list.toArray(new Stu[list.size()]);
Arrays.sort(array, new Comparator<Stu>() {
public int compare(Stu o1, Stu o2)
{
int num = o1.age - o2.age;
if(num == 0){
return o1.name.compareTo(o2.name);
}
return num;
};
});
for(Stu e : list)
{
e.print();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java