【发布时间】:2015-04-01 19:45:56
【问题描述】:
我知道java中的TreeSet会自动按升序对其元素进行排序,并保证顺序。
例如,如果我有一个随机的Date 对象数组并将其复制到TreeSet,那么它将以排序方式添加到TreeSet。
但假设我不是一个简单的Date 对象,而是一个ArrayList 的HashMap<String,Object>,格式如下。
arraylist 中的第一个值,
{mydate = 32156464 , mystring = "abc", mystring2 = "xyz"}
hashmap 数组列表中的第二个值,
{mydate = 64687678 , mystring = "abdc", mystring2 = "xyzzz"}
hashmap 数组列表中的第三个值,
{mydate = 11233678 , mystring = "abxdc", mystring2 = "xyzppzz"}
现在,如果我想根据 mydate 键对这个 hashmap 的数组列表进行排序,我必须像这样在 TreeSet 实例中创建一个新的比较器,
public static Set<HashMap<String, Object>> mySet = new TreeSet<>(new Comparator<HashMap<String, Object>>() {
@Override
public int compare(HashMap<String, Object> o1, HashMap<String, Object> o2) {
return ((Date) o2.get(mydate)).compareTo((mydate) o1.get(DATE));
}
});
它会将数组列表按排序顺序存储在TreeSet 中。但我使用了自定义Comparator 来实现这一点。如果我还为其提供自定义Comparator,那么在这种情况下使用TreeSet 对数据进行排序有什么意义?
如何在不使用TreeSet 中Comparator 的新实例的情况下根据date 值对HashMap 中的ArrayList 进行排序?
【问题讨论】:
-
排序容器的目的是让您的项目保持特定的顺序。比较器是您指定决定该顺序的因素的方法。