Java:SortedMap,TreeMap,可比吗?如何使用?
我有一个对象列表,我需要根据其字段之一的属性对其进行排序。我听说SortedMap和Comparators是执行此操作的最佳方法。
- 我要对正在排序的类实施Comparable,还是创建一个新类?
- 如何实例化SortedMap并传递比较器?
- 排序如何进行?当插入新对象时,它会自动对所有内容进行排序吗?
这段代码给我一个错误:
private TreeMap<Ktr> collection = new TreeMap<Ktr>();
(Ktr工具Comparator<Ktr>
)。Eclipse表示期望类似TreeMap<K, V>
,因此我提供的参数数量不正确。
回答:
比较简单的方法是
Comparable
使用现有对象来实现,尽管您可以创建一个Comparator
并将其传递给SortedMap
。注意
Comparable
和Comparator
是两个不同的事物;一个实现的类与另一个对象Comparable
进行比较this
,而一个实现的类则Comparator
与其他 两个对象进行比较。
如果实现
Comparable
,则不需要将任何特殊的东西传递给构造函数。只需致电new TreeMap<MyObject>()
。( 当然Maps
需要两个通用参数,但不是一个。愚蠢的我!)如果您创建另一个实现的类
Comparator
,则将该类的实例传递给构造函数。是的,根据
TreeMap
Javadocs的说法。
在重新阅读问题时,这都没有道理。如果您已经有了列表,则明智的做法是实施Comparable
并调用Collections.sort
它。无需地图。
一些代码:
public class MyObject implements Comparable<MyObject> { // ... your existing code here ...
@Override
public int compareTo(MyObject other) {
// do smart things here
}
}
// Elsewhere:
List<MyObject> list = ...;
Collections.sort(list);
与一样SortedMap
,您可以创建一个Comparator<MyObject>
并将其传递给Collections.sort(List,
Comparator)。
以上是 Java:SortedMap,TreeMap,可比吗?如何使用? 的全部内容, 来源链接: utcz.com/qa/412909.html