要充分理解排序就必须先理解最后的return 0, -1 , 1 这三个数字代表的含义。它们不是代表数字而是代表前面和后面要比较的值哪个大哪个小?如果是0表示要比较的这两个数字相等。如果是1表示前面数字大,如果-1表示前面数字小。要理解这个就没问题了。
在写这个比较规则的时候,就想着前面数字和后面数字比较,如果前面大就return 1,否则return -1.
--上面的例子有几重对比排序的功能,这个以后可以借鉴
public class ComparatorTest implements Comparator {
public int compare(Object o1, Object o2) {
//传进来要比较的两上对象
Person person1 =(Person)o1;
Person person2 =(Person)o2;
//先比较id
int flag=person1.getId().compareTo(person2.getId());
if(flag==0){
//如果id==0 即两个对象 id 对同 再比较name
flag= person1.getName().compareTo(person2.getName());
}
System.out.println(flag);
return flag;
}
--下面的例子是浙江电信退票按照退票时间的排序
List<Map.Entry<String, List<Object[]>>> oList = new ArrayList<Map.Entry<String,List<Object[]>>>(backBillMap.entrySet());
Collections.sort(oList, new Comparator<Map.Entry<String, List<Object[]>>>() {
@Override
public int compare(Entry<String, List<Object[]>> o1,
Entry<String, List<Object[]>> o2) {
if(CollectionUtils.isEmpty(o1.getValue())) return 0;
if(CollectionUtils.isEmpty(o2.getValue())) return 0;
Object[] obj1 = o1.getValue().get(0);
Object[] obj2 = o2.getValue().get(0);
Date date1 = DateUtils.toDate(obj1[0].toString(), DateUtils.YEAR_MONTH_DAY_HH_MM_SS);
Date date2 = DateUtils.toDate(obj2[0].toString(), DateUtils.YEAR_MONTH_DAY_HH_MM_SS);
return (date2.compareTo(date1));
}});
}
在进行排序的时候因为此MAP中的List有为空的情况,排序一直没有效果,但是将为空的情况排除之后就可以正常排序了
我怀疑就是因为下面这句引起的,导致它的排序规则混乱了
if(CollectionUtils.isEmpty(o1.getValue())) return 0;
分享到:
相关推荐
当我们需要对List中的元素进行排序时,`Collections.sort()`方法就派上了用场。这个方法能够根据元素的自然顺序或者自定义的比较器进行排序。本文将深入探讨`Collections.sort()`的使用、原理以及如何自定义排序规则...
Java中的Collections.sort排序是Java.util.Collections类中的一个静态方法,用于对列表进行排序。下面将详细介绍Collections.sort排序的使用和实现机制。 Collections.sort()方法的使用: Collections.sort()方法...
Java中的`Arrays.sort()`和`Collections.sort()`是两个常用的排序函数,它们分别用于对数组和集合进行排序。这两个函数在内部实现上有所不同,但都基于高效的排序算法。 首先,`Collections.sort()`方法在处理列表...
如果列表中的元素实现了 `Comparable` 接口,那么 `Collections.sort()` 会使用元素的自然顺序进行排序。例如,如果你有一个包含整数的列表,它们会按照从小到大的顺序排序。对于自定义类,需要重写 `Comparable` ...
`Collections.sort()`方法会使用`Comparator`的`compare()`方法来比较列表中的每一对元素,并根据比较结果进行排序。`compare()`方法应该遵循以下规则: 1. 如果`o1`应该出现在`o2`之前,返回负整数。 2. 如果`o1`和...
在Java编程语言中,`Collections.sort()` 方法是一个非常重要的工具,用于对List接口实现的集合进行排序。这个方法使得开发者能够方便地按照指定的顺序排列集合中的元素。本篇文章将详细探讨如何使用 `Collections....
接着,我们使用 Collections.sort() 方法对列表进行排序。最后,我们输出排序后的结果。 ```java package CollectionDemo; import java.util.ArrayList; import java.util.Collections; import java.util.List; ...
在上面的代码中,我们首先创建了一个 Integer 类型的 List,然后使用 Collections.sort 方法对其进行排序。排序后的结果是默认的正序排序。 自定义类的排序 在实际应用中,我们经常需要对自定义类进行排序。...
本文将深入探讨两种使用Collections.sort方法对List排序的方法。 首先,第一种方法是让List中的对象实现Comparable接口。Comparable接口定义了一个自然排序的规则,使得实现了该接口的类的对象可以进行比较并排序。...
在这个场景下,我们使用`Collections.sort()`函数对一个包含Map对象的List进行排序,然后将排序后的数据适配到ListView中。以下是关于这个主题的详细解释。 **一、Map与List的关系** 在Java中,Map是一种键值对的...
在Java编程中,Collections工具类提供了许多方便的集合操作,其中`sort()`方法是一个非常重要的功能,用于对List类型的集合进行排序。本文将详细介绍`Collections.sort()`方法的两种使用方式及其示例。 ### 一、...
在这个文档中,我们主要关注`Collections`类中的一些核心方法的使用,包括`reverse()`, `sort()`, `shuffle()`, `swap()`, `replaceAll()`, `max()`, `min()`以及`frequency()`。 1. **`Collections.reverse(List...
Collections Collections 是 Java 中的一个集合工具类,提供了多种操作集合的...这个示例代码展示了如何使用 Collections 中的部分方法,包括反转列表、随机排序、互换元素、排序、二分查找、查找最大和最小元素等。
1. **自然排序**:如果 `List` 中的元素是实现了 `Comparable` 接口的对象,那么可以使用 `Collections.sort()` 方法进行自然排序。`Comparable` 接口定义了一个 `compareTo()` 方法,该方法用于比较对象之间的大小...
例如,Collections.sort()方法可以对List进行排序,而Collections.synchronizedXXX()方法则可以帮助我们创建线程安全的集合。 在实际开发中,选择合适的集合类型和方法至关重要。例如,当我们需要保持元素插入顺序...
Java的`sort`方法采用了一种称为TimSort的稳定排序算法,由Tim Peters在Python中设计,后被引入Java。TimSort是一种混合排序算法,结合了插入排序(对于小数组高效)和归并排序(保证稳定性及良好性能)的特点。 ##...
首先,`sort(List<T> list)`方法是Collections工具类中最常用的排序方法之一,它根据列表中元素的自然排序(natural ordering)来对列表进行排序。自然排序是指列表中的元素必须实现Comparable接口,该接口定义了一...
// 其他属性和方法... } ArrayList<User> userList = new ArrayList(); // 添加用户对象... Comparator<User> nameComparator = new Comparator() { @Override public int compare(User u1, User u2) { ...
Java中的`Collections.sort()`方法是最常用的排序工具,它可以对List接口的实现类进行原地排序。例如,我们可以对ArrayList或LinkedList调用此方法,排序会按照元素的自然顺序或者自定义比较器进行。 ```java List...