Java:SortedMap,TreeMap,Comparable?如何使用?

Nic*_*ner 5 java interface treemap comparator sortedmap

我有一个对象列表,我需要根据其中一个字段的属性进行排序.我听说SortedMap和Comparators是最好的方法.

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

编辑: 这段代码给我一个错误:

private TreeMap<Ktr> collection = new TreeMap<Ktr>();
Run Code Online (Sandbox Code Playgroud)

(Ktr实施Comparator<Ktr>).Eclipse说它期待类似的东西TreeMap<K, V>,所以我提供的参数数量不正确.

Mic*_*ers 8

  1. 更简单的方法是Comparable使用现有对象实现,尽管您可以创建一个Comparator并将其传递给SortedMap.
    需要注意的是ComparableComparator是两个不同的东西; 实现一类Comparable比较this另一目的,而实施的一类Comparator比较两个其他对象.
  2. 如果实现Comparable,则不需要将任何特殊内容传递给构造函数.打电话吧new TreeMap<MyObject>().(编辑:除了当然Maps需要两个通用参数,而不是一个.傻我!)
    如果您改为创建另一个类实现Comparator,则将该类的实例传递给构造函数.
  3. 是的,据TreeMapJavadocs说.

编辑:在重新阅读问题时,这一切都没有意义.如果你已经有了一个列表,那么明智的做法就是实现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);
Run Code Online (Sandbox Code Playgroud)

与之一样SortedMap,您可以创建一个Comparator<MyObject>并将其传递给Collections.sort(List, Comparator).