web-dev-qa-db-ja.com

HashMapの代わりにEnumMapを使用する理由

すでにHashMapがあるのに、なぜEnumMapを使用するのでしょうか?

8

Javadoc はかなり良い議論になります:

列挙型マップは、内部的に配列として表されます。この表現は非常にコンパクトで効率的です。

実装上の注意:すべての基本操作は一定時間で実行されます。それらは(保証されていませんが)HashMapの対応物よりも高速である可能性があります。

11
Thilo

EnumMapの主な理由は、列挙型用に特別に最適化されていることです。さらなる利点は以下に記載されています。

https://javarevisited.blogspot.com/2012/09/difference-between-enummap-and-hashmap-in-Java-vs.html#axzz5XTB1xBUe から助けを借りました

1)EnumMapとHashMapの何よりも重要な違いは、EnumMapが列挙型キー用に最適化されているのに対し、HashMapはHashtableと同様の汎用マップ実装であるということです。 EnumMapのキーとしてEnum以外のタイプを使用することはできませんが、HashMapのキーとしてEnumと他のオブジェクトの両方を使用できます。

2)EnumMapとHashMapのもう1つの違いは、パフォーマンスです。前のポイントで説明したように、列挙型キーに対して行われる特殊な最適化により、列挙型をキーオブジェクトとして使用する場合、列挙型はハッシュマップよりもパフォーマンスが向上する可能性があります。

3)HashMapとEnumMapの違いと見なすことができるもう1つのことは、衝突の確率です。 Enumは内部的に配列として維持され、それらは、EnumMapのput()メソッドから取得された次のコードに示すように、ordinal()を使用して自然な順序で格納されるためです。

int index = ((Enum)key).ordinal();
Object oldValue = vals[index];
vals[index] = maskNull(value);
7
Pooja Aggarwal