-->

Java的:SortedMap的,TreeMap的,可比性? 如何使用?(Java: Sorte

2019-07-18 10:15发布

我有我需要根据自己的领域之一的属性来排序对象的列表。 我听说SortedMap的和比较是做到这一点的最好办法。

  1. 难道我实现比得上我整理类,还是我创建一个新类?
  2. 如何实例化的SortedMap,并通过在比较?
  3. 如何排序的工作? 作为新对象插入它会自动排序的一切吗?

编辑:此代码是给我的错误:

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

(KTR实现Comparator<Ktr> Eclipse中说,这是希望像TreeMap<K, V>所以我提供参数的数目不正确。

Answer 1:

  1. 更简单的办法来实现Comparable与您现有的对象,虽然你可以改为创建一个Comparator ,并把它传递给SortedMap
    需要注意的是ComparableComparator是两个不同的东西; 实现一类Comparable比较this另一目的,而实施的一类Comparator进行比较的其他两个对象。
  2. 如果实现Comparable ,你并不需要通过任何特殊到构造函数。 只需拨打new TreeMap<MyObject>()编辑:除了当然的Maps需要两个通用参数,而不是一个人傻傻的我!)
    如果改为创建另一个类实现Comparator ,传递的类的实例到构造。
  3. 是的,根据TreeMap的Javadoc 。

编辑:在重新阅读的问题,这一切都不是有道理的。 如果你已经有一个列表中,明智的做法是实现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)



Answer 2:

1。

这要看情况而定。 比方说,物体A应该在你设定的对象B之前进行排序。 如果是一般有意义的考虑比B少,则实现可比才有意义。 如果订单不仅使在您使用的设置上下文意识,那么你或许应该建立一个比较。

2。

new TreeMap(new MyComparator());

或者没有创建MyComparator类:

new TreeMap(new Comparator<MyClass>() {
    int compare(MyClass o1, MyClass o2) { ... }
});

是的。



Answer 3:

既然你有一个清单,因为你有地图,你想要一个有序集合,我想对一个参数得到一个错误:

SortedSet<Ktr> set = new TreeSet<Ktr>(comparator);

这将保持排序的集合,即一个迭代器将返回它们的排序顺序的元素。 也有具体的方法SortedSet的 ,你可能需要使用。 如果你也想往回走,你可以使用NavigableSet 。



Answer 4:

我的回答假设你正在使用的TreeMap实施SortedMap

1)如果使用TreeMap ,你有一个选择。 您可以实现Comparable你的类直接或通过一个独立的Comparator的构造。

2.)实施例:

Comparator<A> cmp = new MyComparator();
Map<A,B> map = new TreeMap<A,B>(myComparator);

3)是的,这是正确的。 内部TreeMap的使用红黑树来存储元件,以便它们被插入; 执行插入(或检索)的时间成本为O(log N)。



Answer 5:

你让一个Comparator<ClassYouWantToSort> 然后比较比较要排序的字段。

当创建TreeMap ,可以创建一个TreeMap<ClassYouWantToSort>并且您在通过Comparator作为参数。 然后,当你插入类型的对象ClassYouWantToSort中, TreeMap使用您Comparator给他们正确排序。

编辑:由于亚当斯基所指出的,你也可以让ClassYouWantToSort本身Comparable 。 其优点是,你有更少的类来处理,代码简单, ClassYouWantToSort得到一个方便的默认排序。 它的缺点是ClassYouWantToSort可能没有一个明显的排序,所以你必须实现Comparables的其他情形反正。 你也可能无法改变ClassYouWantToSort

EDIT2:如果你只是有一堆,你扔进收集的对象,这是不是一个Map (即它不是从一组对象映射到另一个),那么你想有一个TreeSet ,而不是一个TreeMap



文章来源: Java: SortedMap, TreeMap, Comparable? How to use?