使用Collections.sort()对List/ArrayList进行排序

简介:

  今天写Android应用,遇到一个对List进行排序的问题,经过google的提示,发现用Collections.sort(List list, Comparator c) 就可以对List/ArrayList进行排序,很Happy的去写代码做测试,结果发现排序没有起作用,检查之,发现代码没什么问题啊(代码如下),奇怪了。

 
 
  1. public void changeSort(int type){ 
  2.      
  3.     Comparator<ItemBean> comparator; 
  4.     Toast.makeText(this"type=="+type, 5).show(); 
  5.     switch(type){ 
  6.         case 1:{ 
  7.             // 价格从低到高排序 
  8.             comparator = new PriceLowToHighComparator(); 
  9.             Collections.sort(list, comparator); 
  10.         } 
  11.         break
  12.         case 2:{ 
  13.             // 价格从高到低排序 
  14.             comparator = new PriceHighToLowComparator(); 
  15.             Collections.sort(list, comparator); 
  16.         } 
  17.         break
  18.     } 
  19.      
  20.     adapter.setItemBeanList(list); 
  21.     adapter.notifyDataSetChanged(); 

 
 
  1. public class PriceHighToLowComparator implements Comparator<ItemBean> { 
  2.  
  3.     @Override 
  4.     public int compare(ItemBean itemBean1, ItemBean itemBean2) { 
  5.          
  6.         double price1 = 0
  7.         double price2 = 0
  8.          
  9.         if(itemBean1.getItemPrice() != null && !"".equals(itemBean1.getItemPrice())){ 
  10.             price1 = Double.parseDouble(itemBean1.getItemPrice()); 
  11.         } 
  12.          
  13.         if(itemBean2.getItemPrice() != null && !"".equals(itemBean2.getItemPrice())){ 
  14.             price2 = Double.parseDouble(itemBean2.getItemPrice()); 
  15.         } 
  16.          
  17.         if(price1 > price2){ 
  18.             return -1
  19.         } 
  20.         else if(price1 < price2){ 
  21.             return 1
  22.         } 
  23.         else
  24.             return 0
  25.         } 
  26.     } 
  27.  

  然后就是各种改返回值,反复改了三次以后发现问题所在,返回值不正确,上面的这个类是list的价格从高到低的规则类,Collections.sort(List list, Comparator c) 会根据返回值来对list中的数据进行排序,最初如果price1>price2,则return 1,但是试验发现list中的数据无变化,随后改成return -1,试验发现list中的数据能按照预想的效果排序了,可是新的问题出来了,为什么price1>price2,但是要返回-1呢?

  继续google之,发现http://solodu.iteye.com/blog/630891 这篇文章的主人在文章结尾说了一段话“要充分理解排序就必须先理解最后的return 0, -1 , 1  这三个数字代表的含义。它们不是代表数字而是代表前面和后面要比较的值哪个大哪个小?如果是0表示要比较的这两个数字相等。如果是1表示前面数字大,如果-1表示前面数字小。要理解这个就没问题了。”但是结合我自己写的这个排序规则,我突然觉得0,1,-1这三个数好像不是说谁大谁小,而是一个排序的问题,当返回-1时,前面的变量(即price1)排在后面的变量(price2)的前面,反之则排在后面。果真如此么,正好就着这次的项目的排序要求比较多,也就多写几个规则测试一下,结果确实如此,根据不同规则,如果想将前面的变量放到后面的变量之前,则返回-1即可。










本文转自 sw840227 51CTO博客,原文链接:http://blog.51cto.com/jerrysun/608416,如需转载请自行联系原作者
目录
相关文章
|
1月前
|
NoSQL Java Redis
List集合按照由小到大排序或者由大到小排序
List集合按照由小到大排序或者由大到小排序
43 0
|
2月前
|
设计模式 安全 容器
数据结构第一篇【探究List和ArrayList之间的奥秘 】
数据结构第一篇【探究List和ArrayList之间的奥秘 】
28 5
|
3月前
|
NoSQL Java Redis
List集合按照由小到大排序或者由大到小排序
List集合按照由小到大排序或者由大到小排序
26 3
|
5月前
|
Java API 存储
Java如何对List进行排序?
【7月更文挑战第26天】
255 9
Java如何对List进行排序?
|
4月前
|
存储 Java API
【Java高手必备】揭秘!如何优雅地对List进行排序?掌握这几种技巧,让你的代码瞬间高大上!
【8月更文挑战第23天】本文深入探讨了Java中对List集合进行排序的各种方法,包括使用Collections.sort()、自定义Comparator以及Java 8的Stream API。通过示例代码展示了不同情况下如何选择合适的方法:从简单的整数排序到自定义类对象的排序,再到利用Comparator指定特殊排序规则,最后介绍了Stream API在排序操作中的简洁应用。理解这些技术的区别与应用场景有助于提高编程效率。
122 4
|
5月前
|
存储 安全 Java
详解Java中集合的List接口实现的ArrayList方法 | Set接口实现的HashSet方法
详解Java中集合的List接口实现的ArrayList方法 | Set接口实现的HashSet方法
|
6月前
|
Java 索引
JavaSE——集合框架一(3/7)-List系列集合:特点、方法、遍历方式、ArrayList集合的底层原理
JavaSE——集合框架一(3/7)-List系列集合:特点、方法、遍历方式、ArrayList集合的底层原理
46 2
|
6月前
|
Java 索引
Java List实战:手把手教你玩转ArrayList和LinkedList
【6月更文挑战第17天】在Java中,ArrayList和LinkedList是List接口的实现,分别基于动态数组和双向链表。ArrayList适合索引访问,提供快速读取,而LinkedList擅长插入和删除操作。通过示例展示了两者的基本用法,如添加、访问、修改和删除元素。根据场景选择合适的实现能优化性能。
54 0
|
6月前
|
Java 开发者 索引
Java List全攻略:从ArrayList到LinkedList,一网打尽!
【6月更文挑战第17天】Java List详解:ArrayList依赖动态数组,擅长随机访问和遍历,适合少次插入删除;LinkedList基于双向链表,插入删除高效,尤其在头尾操作,但随机访问慢。选择取决于应用场景,理解特性以优化代码。探索ArrayList与LinkedList,提升编程效率!
77 0
|
6月前
|
Java 索引
那些年,我们追过的Java List——ArrayList与LinkedList的爱恨情仇
【6月更文挑战第17天】ArrayList与LinkedList,Java List接口的双子星,各有千秋。ArrayList基于数组,随机访问快速,但插入删除慢;LinkedList用链表实现,插入删除高效,但索引访问慢。两者在爱恨情仇中教会我们权衡选择,成为编程旅程中难忘的记忆。 ```
29 0