我应该使用哪个Map类?

时间:2014-03-23 13:20:27

标签: java map hashmap

http://docs.oracle.com/javase/7/docs/api/java/util/Map.html中,我看到了19个实现Map接口的类。 我应该使用哪一个?我想将整数映射到整数。我会使用Array但是 我在很多例子中看到了HashMap,所以我在想:

Map<Integer, Integer> myMap = Collections.synchronizedMap(new HashMap<Integer, Integer>());

基本上我想模拟我可以在其他语言(如PHP)上找到的不太严格的数组,我可以将任何整数设置为任意值,而无需考虑固定长度或使用列表。

3 个答案:

答案 0 :(得分:1)

如果您不关心线程安全,请使用Hashmap<Integer, Integer>。如果多个线程将访问地图,那么ConcurrentHashMap可能是您的最佳选择。有关详细信息,请参阅thread safe map for java

答案 1 :(得分:1)

您可以根据项目要求使用HashMapMultiHashMap ref from apache。来自Collections.synchronized*的同步集合比普通集合慢。所以基本上如果你不在多线程环境中使用该集合,你应该避免使用basuc一个线程的同步集合,因为它们只是速度较慢。

答案 2 :(得分:1)

您的最简单,最简单的选择是使用HashMap<Integer, Integer>()。您不必担心线程,或在排序时支付任何性能损失(就像使用TreeMap时那样)。

您还会询问线程。请注意,HashMap本身不是线程安全的,并且对它的同时操作将会爆炸(例如,映射执行内部状态更改,例如调整put,并且同时put可能会失败)。因此可能需要ConcurrentHashMap。但请注意,如果您正在执行多个原子操作,则可能需要仍然围绕该对象进行同步,例如

if (!map.contains(key)) {
   map.put(key, ...);
}
相关问题