public V put(K key, V value) {
Entry<K,V> t = root;
if (t == null) {
compare(key, key); // type (and possibly null) check
root = new Entry<>(key, value, null);
size = 1;
modCount++;
return null;
}
int cmp;
...
}
final int compare(Object k1, Object k2) {
return comparator==null ? ((Comparable<? super K>)k1).compareTo((K)k2)
: comparator.compare((K)k1, (K)k2);
}
私のアプリケーションでいくつかのバグに直面した後、私はTreeMaps putメソッドをデバッグしなければなりませんでした。私の問題は、マップに入れられたオブジェクトの比較でした。奇妙なのは、私がFIRST要素をマップに置くと、そのキーはそれ自身と比較されます。私はそれがなぜそんなにうまくいくのか理解できません。任意の洞察(コメントされた「タイプ(およびnullの可能性もある)チェック」以外)?キーがnullであるかどうかを確認するのはなぜですか?どのような "タイプ"チェックが行われたのか、何のために?TreeMap java実装 - 第1要素を入れよう
ここでさらに詳しい説明があります:http://bugs.java.com/view_bug.do?bug_id=5045147 – Koekje