java List 排序 Collections.sort()

简介:

有的时候,我们需要对获取的list集合进行排序,然后输出。那么我们一般会用到Collections.sort。


用Collections.sort方法对list排序有两种方法

 第一种是list中的对象实现Comparable接口,如下:


[java] view plain copy

  1. /** 

  2.  * 根据order对User排序 

  3. */  

  4. public class User implements Comparable<User>{  

  5.      private String name;  

  6.      private Integer order;  

  7.      public String getName() {  

  8.          return name;  

  9.      }  

  10.      public void setName(String name) {  

  11.          this.name = name;  

  12.      }  

  13.      public Integer getOrder() {  

  14.          return order;  

  15.      }  

  16.      public void setOrder(Integer order) {  

  17.          this.order = order;  

  18.      }  

  19.      public int compareTo(User arg0) {  

  20.          return this.getOrder().compareTo(arg0.getOrder());  

  21.      }  

  22.  } 测试一下:  

  23. public class Test{  

  24.   

  25.      public static void main(String[] args) {  

  26.          User user1 = new User();  

  27.          user1.setName("a");  

  28.          user1.setOrder(1);  

  29.          User user2 = new User();  

  30.          user2.setName("b");  

  31.          user2.setOrder(2);  

  32.          List<User> list = new ArrayList<User>();  

  33.          //此处add user2再add user1  

  34.         list.add(user2);  

  35.          list.add(user1);  

  36.          Collections.sort(list);  

  37.          for(User u : list){  

  38.              System.out.println(u.getName());  

  39.          }  

  40.      }  

  41.  }   





输出结果如下
 a
 b

第二种方法是根据Collections.sort重载方法来实现,例如:

[java] view plain copy

  1. /** 

  2.  * 根据order对User排序 

  3. */  

  4. public class User { //此处无需实现Comparable接口  

  5.     private String name;  

  6.      private Integer order;  

  7.      public String getName() {  

  8.          return name;  

  9.      }  

  10.      public void setName(String name) {  

  11.          this.name = name;  

  12.      }  

  13.      public Integer getOrder() {  

  14.          return order;  

  15.      }  

  16.      public void setOrder(Integer order) {  

  17.          this.order = order;  

  18.      }  

  19.  }  

  20.   

  21.  主类中这样写即可(HastSet——>List——>sort进行排序):  

  22. public class Test {  

  23.     public static void main(String[] args) {  

  24.         User user1 = new User();  

  25.            user1.setName("a");  

  26.       user1.setOrder(1);  

  27.       User user2 = new User();  

  28.       user2.setName("b");  

  29.       user2.setOrder(2);  

  30.   

  31.         Set<User> Hset = new HashSet<User>(); //set不能存放重复的对象 

  32.         Hset.add(user2);  

  33.         Hset.add(user1);  

  34.   

  35.         List<User> list = new ArrayList<User>();  

  36.         list.addAll(Hset);  

  37.   

  38.   

  39.         Collections.sort(list,new Comparator<User>(){  

  40.             public int compare(User arg0, User arg1) {  

  41.                 return arg1.getOrder().compareTo(arg0.getOrder());    

  42.             }  

  43.         });  

  44.         for(User u : list){  

  45.             System.out.println(u.getName());  

  46.         }  

  47.     }  




输出结果如下:

a
b



默认为升序,将。return arg0.getOrder().compareTo(arg1.getOrder());    改为:
return arg1.getOrder().compareTo(arg0.getOrder());   
就成降序的了。


      本文转自建波李 51CTO博客,原文链接:http://blog.51cto.com/jianboli/1890628,如需转载请自行联系原作者




相关文章
|
29天前
|
人工智能 Java
Java 中数组Array和列表List的转换
本文介绍了数组与列表之间的相互转换方法,主要包括三部分:1)使用`Collections.addAll()`方法将数组转为列表,适用于引用类型,效率较高;2)通过`new ArrayList&lt;&gt;()`构造器结合`Arrays.asList()`实现类似功能;3)利用JDK8的`Stream`流式计算,支持基本数据类型数组的转换。此外,还详细讲解了列表转数组的方法,如借助`Stream`实现不同类型数组间的转换,并附带代码示例与执行结果,帮助读者深入理解两种数据结构的互转技巧。
Java 中数组Array和列表List的转换
|
3月前
|
前端开发 JavaScript UED
React 拖拽排序组件 Draggable List
在现代Web应用中,拖拽排序功能显著提升用户体验。使用React结合`react-dnd`库,可以轻松创建高效且易于维护的拖拽排序组件。通过简单的拖拽操作,用户能直观调整列表项顺序,适用于任务管理、看板工具等场景。实现步骤包括项目初始化、安装依赖、创建基础组件、添加拖拽功能及管理状态和事件。常见问题如拖拽效果不流畅、顺序未更新等可通过性能优化、正确处理索引交换等方式解决。移动端支持也需考虑,确保跨平台的良好体验。
203 25
|
3月前
|
Java 程序员
Java 排序神器:Comparable 和 Comparator 该怎么选?
嗨,大家好,我是小米!今天和大家聊一聊Java社招面试中常考的经典问题——Comparable和Comparator的区别。Comparable定义对象的自然排序,适用于单一固定的排序规则;Comparator则是策略接口,用于定义自定义排序规则,适用于多样化或多变的排序需求。掌握这两者的区别是理解Java排序机制的基础,也是面试中的加分题。结合实际项目场景深入探讨它们的应用,能更好地打动面试官。如果你觉得有帮助,欢迎点赞、收藏、分享,期待你的一键三连!我们下期见~ 我是小米,一个喜欢分享技术的程序员,关注我的微信公众号“软件求生”,获取更多技术干货!
59 20
|
6月前
|
安全 Java 程序员
深入Java集合框架:解密List的Fail-Fast与Fail-Safe机制
本文介绍了 Java 中 List 的遍历和删除操作,重点讨论了快速失败(fail-fast)和安全失败(fail-safe)机制。通过普通 for 循环、迭代器和 foreach 循环的对比,详细解释了各种方法的优缺点及适用场景,特别是在多线程环境下的表现。最后推荐了适合高并发场景的 fail-safe 容器,如 CopyOnWriteArrayList 和 ConcurrentHashMap。
136 5
|
6月前
|
Java 程序员 编译器
Java|如何正确地在遍历 List 时删除元素
从源码分析如何正确地在遍历 List 时删除元素。为什么有的写法会导致异常,而另一些不会。
142 3
|
6月前
|
Java 程序员
Java|List.subList 踩坑小记
不应该仅凭印象和猜测,就开始使用一个方法,至少花一分钟认真读完它的官方注释文档。
83 1
|
5月前
|
NoSQL Java Redis
List集合按照由小到大排序或者由大到小排序
List集合按照由小到大排序或者由大到小排序
99 0
|
6月前
|
存储 搜索推荐 算法
【用Java学习数据结构系列】七大排序要悄咪咪的学(直接插入,希尔,归并,选择,堆排,冒泡,快排)以及计数排序(非比较排序)
【用Java学习数据结构系列】七大排序要悄咪咪的学(直接插入,希尔,归并,选择,堆排,冒泡,快排)以及计数排序(非比较排序)
58 1
|
7月前
|
NoSQL Java Redis
List集合按照由小到大排序或者由大到小排序
List集合按照由小到大排序或者由大到小排序
58 3
|
8月前
|
Java
用JAVA架建List集合为树形结构的代码方法
这段代码定义了一个表示树形结构的 `Node` 类和一个用于构建树形结构的 `TreeController`。`Node` 类包含基本属性如 `id`、`pid`、`name` 和 `type`,以及子节点列表 `children`。`TreeController` 包含初始化节点列表并将其转换为树形结构的方法。通过过滤和分组操作实现树形结构的构建。详情可见:[代码示例链接1](http://www.zidongmutanji.com/zsjx/43551.html),[代码效果参考链接2](https://www.257342.com/sitemap/post.html)。
96 5