Java:SortedMap、TreeMap、可比较?如何使用?

2024-05-16

我有一个对象列表,需要根据其中一个字段的属性进行排序。我听说 SortedMap 和 Comparator 是实现此目的的最佳方法。

  1. 我是否要与正在排序的类实现 Comparable,还是创建一个新类?
  2. 如何实例化 SortedMap 并传入 Comparator?
  3. 排序是如何进行的?当插入新对象时它会自动对所有内容进行排序吗?

EDIT:这段代码给了我一个错误:

private TreeMap<Ktr> collection = new TreeMap<Ktr>();

(Ktr实现Comparator<Ktr>)。 Eclipse 说它期待类似的事情TreeMap<K, V>,所以我提供的参数数量不正确。


  1. 更简单的方法是实现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对象。
  2. 如果你实施Comparable,您不需要将任何特殊内容传递到构造函数中。只需致电new TreeMap<MyObject>(). (Edit:当然除外Maps需要两个通用参数,而不是一个。我真傻!)
    如果您创建另一个类来实现Comparator,将该类的实例传递到构造函数中。
  3. 是的,根据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(使用前将#替换为@)

Java:SortedMap、TreeMap、可比较?如何使用? 的相关文章

随机推荐