我有一个对象列表,需要根据其中一个字段的属性进行排序。我听说 SortedMap 和 Comparator 是实现此目的的最佳方法。
- 我是否要与正在排序的类实现 Comparable,还是创建一个新类?
- 如何实例化 SortedMap 并传入 Comparator?
- 排序是如何进行的?当插入新对象时它会自动对所有内容进行排序吗?
EDIT:这段代码给了我一个错误:
private TreeMap<Ktr> collection = new TreeMap<Ktr>();
(Ktr实现Comparator<Ktr>
)。 Eclipse 说它期待类似的事情TreeMap<K, V>
,所以我提供的参数数量不正确。
- 更简单的方法是实现
Comparable
使用现有的对象,尽管您可以创建一个Comparator
并将其传递给SortedMap
.
注意Comparable http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html and Comparator http://java.sun.com/javase/6/docs/api/java/util/Comparator.html是两个不同的东西;一个类实现Comparable
比较this
到另一个对象,而一个类实现Comparator
比较两个other对象。
- 如果你实施
Comparable
,您不需要将任何特殊内容传递到构造函数中。只需致电new TreeMap<MyObject>()
. (Edit:当然除外Maps
需要两个通用参数,而不是一个。我真傻!)
如果您创建另一个类来实现Comparator
,将该类的实例传递到构造函数中。
- 是的,根据TreeMapJava文档 http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html.
Edit:重新阅读这个问题时,这些都没有意义。如果您已经有了一个清单,明智的做法是实施Comparable
然后打电话Collections.sort http://java.sun.com/javase/6/docs/api/java/util/Collections.html#sort(java.util.List)在上面。不需要地图。
一点代码:
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) http://java.sun.com/javase/6/docs/api/java/util/Collections.html#sort(java.util.List,%20java.util.Comparator).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)