Java里面List排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java里面List排序相关的知识,希望对你有一定的参考价值。

现在有实体O 里面有两个字段A,B都是ID,
List<O>排序 先按A的升序(A的id会重复),然后在重复的A的ID里面B按升序排列,应该怎么做效率高

参考技术A 摘自:http://www.blogjava.net/zygcs/archive/2008/01/17/176032.html

//一个POJO例子

class User
String name;
String age;

public User(String name,String age)
this.name=name;
this.age=age;

public String getAge()
return age;

public void setAge(String age)
this.age = age;

public String getName()
return name;

public void setName(String name)
this.name = name;



//具体的比较类,实现Comparator接口

import java.util.Comparator;
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;

public class ComparatorUser implements Comparator
public int compare(Object arg0, Object arg1)
User user0=(User)arg0;
User user1=(User)arg1;

//首先比较年龄,如果年龄相同,则比较名字

int flag=user0.getAge().compareTo(user1.getAge());
if(flag==0)
return user0.getName().compareTo(user1.getName());
else
return flag;





//测试类
public class SortTest

public static void main(String[] args)
List userlist=new ArrayList();
userlist.add(new User("dd","4"));
userlist.add(new User("aa","1"));
userlist.add(new User("ee","5"));
userlist.add(new User("bb","2"));
userlist.add(new User("ff","5"));
userlist.add(new User("cc","3"));
userlist.add(new User("gg","6"));

ComparatorUser comparator=new ComparatorUser();
Collections.sort(userlist, comparator);

for (int i=0;i<userlist.size();i++)
User user_temp=(User)userlist.get(i);
System.out.println(user_temp.getAge()+","+user_temp.getName());





//首先年龄排序,如果年龄相同,则按名字排序

结果:
1, aa
2, bb
3, cc
4, dd
5, ee //注意:同样是5岁的人,则比较名字(ee,ff),然后排序
5, ff
6, gg本回答被提问者采纳

Java 中List集合中自定义排序

/*
集合框架的工具类。
Collections:集合框架的工具类。里面定义的都是静态方法。

Collections和Collection有什么区别?
Collection是集合框架中的一个顶层接口,它里面定义了单列集合的共性方法。
		它有两个常用的子接口,
		List:对元素都有定义索引。有序的。可以重复元素。
		Set:不可以重复元素。无序。

Collections是集合框架中的一个工具类。该类中的方法都是静态的
		提供的方法中有可以对list集合进行排序,二分查找等方法。
		通常常用的集合都是线程不安全的。因为要提高效率。
		如果多线程操作这些集合时,可以通过该工具类中的同步方法,将线程不安全的集合,转换成安全的。
*/

import java.util.*;

class Test3 
    public static void main(String[] args) 
        System.out.println("-------------sortDemo---------------");
        sortDemo();
        System.out.println("-------------maxDemo---------------");
        maxDemo();
        /**
         * -------------sortDemo---------------
         * [z, qq, zz, aaa, abcd, kkkkk]
         * -------------maxDemo---------------
         * [aaa, abcd, kkkkk, qq, z, zz]
         * max=zz
         */
    

    public static void sortDemo() 
        List<String> list = new ArrayList<String>();
        list.add("abcd");
        list.add("aaa");
        list.add("zz");
        list.add("kkkkk");
        list.add("qq");
        list.add("z");
        Collections.sort(list, new StrLenComparator());
        sop(list);
    

    public static void maxDemo() 
        List<String> list = new ArrayList<String>();

        list.add("abcd");
        list.add("aaa");
        list.add("zz");
        list.add("kkkkk");
        list.add("qq");
        list.add("z");
        Collections.sort(list);
        sop(list);
        String max = Collections.max(list);
        sop("max=" + max);
    

    public static void sop(Object obj) 
        System.out.println(obj);
    



/**
 * 比较器,先按字符长度然后按自然排序
 */
class StrLenComparator implements Comparator<String> 
    public int compare(String s1, String s2) 
        if (s1.length() > s2.length())
            return 1;
        if (s1.length() < s2.length())
            return -1;
        return s1.compareTo(s2);
    

  

以上是关于Java里面List排序的主要内容,如果未能解决你的问题,请参考以下文章

java 怎么将List里面数据排序

java List对象排序的问题……

java中list排序

java中两个list集合如何排序

java List 排序

java中list里面存放map,根据map中的某两个个字段进行排序