Java HashMap.get(key)和TreeMap.get(key)使用equals和compareTo方法

时间:2014-08-21 18:35:13

标签: java map

我有一张地图,它使用我创建的类作为键。该类重写equals和compareTo方法。有人可以具体解释Hashmap.get(key)和TreeMap.get(key)如何使用这些方法吗?

1 个答案:

答案 0 :(得分:2)

Hashmap.get(key)导致调用密钥对象的哈希码,并在使用哈希码决定桶后,然后在密钥上调用equals以确定密钥的值。

TreeMap是SortedMap的一个实现,这意味着在树形图中存储为键的对象应该实现Comparable interace,否则我们需要将Comparator<T>(其中T是键类)对象发送到TreeMap的构造函数。原因是密钥已排序。要对JVM进行排序需要知道如何比较并因此限制如果您的密钥类实现Comparable接口,则调用此接口的compareTo方法实现。这里有一个绑定契约,它声明了key类的compareTo和equals方法应该是兼容的,这意味着compareTo应该返回0并且equals应该为两个相等的键对象返回true,这样你的TreeMap键将是唯一的。

简而言之,

HashMap.get(key)调用key的hashCode方法然后调用equals方法键

TreeMap.get(key)调用键类的compareTo方法或调用Comparator对象的compare方法,该方法将传递给TreeMap的构造函数