什么是TreeMap中的"自然排序"?

Joh*_*ood 10 java treemap

可能重复:
如何在Java中对Map的键进行排序?

在类中TreeMap,Java API说:

基于红黑树的NavigableMap实现.地图根据其键的自然顺序进行排序,或者根据使用的构造函数在地图创建时提供的比较器进行排序.

自然排序是什么意思?用作键的类不必实现Comparable接口,但是将使用什么顺序?

Bri*_*ach 7

如果你自己试用你会发现,你不能使用TreeMap,有一个K未实现Comparable(除非你明确地提供了Comparator通过TreeMap构造函数).

public class App 
{
    public static void main( String[] args )
    {
        TreeMap<App,String> tm = new TreeMap<App,String>();
        tm.put(new App(), "value");
    }
}
Run Code Online (Sandbox Code Playgroud)

线程"main"中的异常java.lang.ClassCastException:App无法强制转换为java.lang.Comparable

put()显式的javadoc :

抛出:
ClassCastException - 如果指定的键无法与映射中当前的键进行比较

TreeMap中用于"自然排序"的javadocs链接将您带到Comparable界面


das*_*ght 5

"自然"排序是Comparable由用作密钥的对象实现接口所暗示的排序TreeMap.实质上,RBTree必须能够告诉哪个键小于另一个键,并且有两种方法可以将该逻辑提供给RBTree实现:

  • 实现Comparable用作键的类中的接口TreeMap,或
  • 提供Comparator在密钥类本身之外进行比较的实现.