java List<T>排序

Posted

tags:

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

Java List<T> 的一个排序问题. 我这儿有个这么个需求: // 这是一个List<T>集合, SpecialArticle 是一个实体Bean, List<SpecialArticle> sa = speArticleCache_id.get(specialId); SpecialArticle 实体中有一个sort 排序的字段,类型为Integer 。 // 也就是这个字段 sa.get(j).getSort(); 我要根据这个字段来排序。请问朋友们有什么比较简便,省内存的处理方案!

一、首先你的SpecialArticle类要实现 java.util.Comparator接口,在public int compare(Object o1, Object o2) 方法中对比两个SpecialArticle的sort属性的大小,第一个的大就返回1,第二个的大就返回-1,一样大就返回0;二、然后使用java.util.Arrays的sort方法来替List集合排序:java.util.Arrays.sort(sa);。 参考技术A 方案很多,大致原理都一样第一步,导出对象数组,以为你现在用的是List,所以存储结构不清楚,只能导出数组来排序第二步,用算法排序,这个地方方案就多了,可以实现Comparable,然后用Arrays.sort,或者自己用排序算法(快排、选择、冒泡、哈希等等)我给个基于选择排序的算法方案吧SpecialArticle [] sas = sa.toArray(new SpecialArticle[0]); //导出数组for(int i = 0; i < sas.length - 1; i ++)int m = i;for(int j = i + 1; j < sas.length; j ++)if(sas[m].getSort()<sas[j].getSort())
m = j;if( m != i)
SpecialArticle tmp = sas[i];
sas[i]=sas[m];
sas[m]=tmp;

-------------------------------楼下的,应该是Comparable而非Comparator,再就是Arrays.sort只支持数组

JAVA list 根据对象的某个属性排序

//需要排序的list
List<T> list= new ArrayList<>();

//开始排序
Collections.sort(list, new Comparator<T>(){
            public int compare(T o1, T o2) {
                //排序属性
                if(o1.getNum() < o2.getNum()){
                    return 1;
                }
                if(o1.getNum() == o2.getNum()){
                    return 0;
                }
                return -1;
            }
        });   

//排序完成  输出
System.out.println(new Gson().toJson(list))

 

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

java list<T> 根据两个字段排序

java 中 List<T>如何按照T中的一个字段排序?

通过Java排序List集合的元素的几种方法

java的冒泡排序

JAVA list 根据对象的某个属性排序

排序算法 插入排序及Java实现