关于Java的Map
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Java的Map相关的知识,希望对你有一定的参考价值。
以Map“复制”为目的,排除其他因素,以下两种方式有何一同?哪种高效率?哪种省资源?
(1)
for(Iterator it = value.keySet().iterator(); it.hasNext();)
Object k = it.next();
_values.put(k, value.get(k));
(2)
for(Iterator it = value.entrySet().iterator(); it.hasNext();)
Map.Entry e = it.next();
_values.put(e.getKey(), e.getValue());
其实我是从Struts2源码里看到的写法(第一种),纠结在HashMap。
估计第一种是为了省资源。
第二个,可以理解为逐个拿取map里面的映射关系,K <->V一次拿出来
第一个存在valu.get(k),根据k取value这里慢了。。。追问
一般的应用会选择HashMap,这样也会慢吗?
追答同样情况下,一个只需要逐个拿。一个需要根据key去寻找,多了操作,你觉得呢?
追问- -! 哈希算法,理论上是很快的。
能不能说下消耗资源方面?
它里面编写来了几个Iterator,没看懂运作过程。。。
理论上是比较快的,差别就在于不管你是根据xxx,你都需要去get()....
从消耗内存来讲,那肯定第二种通过entry拿取耗费了。第一种keyset.get操作的是引用。而第二种非要占据内存的。如果是用来写手机上的操作,个人会毫不犹豫的采取第一种。
其实差别应该很小的。这种事情上没必要纠结吧?
keySet()是返回此映射中包含的键的 Set 视图,entrySet()返回此映射中包含的映射关系的 Set 视图。追问
那为什么 Struts2 选择 keySet() ?
以上是关于关于Java的Map的主要内容,如果未能解决你的问题,请参考以下文章