私は最近、Java 8のハッシュマップでは、リンクされたリストの代わりにバイナリツリーを使用し、ハッシュコードが分岐ファクタとして使用されていることがわかりました。高い衝突の場合、参照はO(ログn) (n)のバイナリツリーを使用しています。私の質問は、償却された時間の複雑さが依然としてO(1)であることと、同じバケットにすべてのエントリを格納するように強制すると、私たちは大きな時間差を見ることができますが、正しい心の誰もそれをすることはありません。Java 8のハッシュマップでリンクリストの代わりにバイナリツリーを使用するのはなぜですか?
バイナリツリーは、左右のノードを両方とも格納するため、単一リンクリストより多くの領域も使用します。何らかの偽のテストケースを除いて、時間の複雑さが全く改善されていない場合は、
これは議論ではありません。私は引用しています:*私の質問は本当に何が良いことなのか[...]多分あなたは大きな時間差を見ることができますが、正しい心の誰もそれをしないでしょう。だから、それはあなたの右の心の中に誰もいないケースを処理するように設計されていると言っているので、devs **は明白に**はダムケースを扱っているので、devsはダムであり、あなたの質問を書き直すことをお勧めします。 – Tunaki
あなたの質問は意味をなさない。ハッシュ衝突が起こらないと仮定すると、バイナリツリーはハッシュ衝突が発生した場合にのみ使用されるため、バイナリツリーは*より多くの領域を消費しません*。より正確には、インプリメンテーションがリンクリストからバイナリツリーに切り替わる前に、衝突の数はしきい値を超えなければなりません。 – Holger
@俊明私は具体的には、そのシナリオを意図的に試みてその利点を示すことを意味しました。それ以上のことはないと思ったら、質問したことはありませんでした。 – user1613360