关于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操作的是引用。而第二种非要占据内存的。如果是用来写手机上的操作,个人会毫不犹豫的采取第一种。

其实差别应该很小的。这种事情上没必要纠结吧?

参考技术A keySet()的方法是首先取key 然后根据key取value。entrySet()则依次去除效率较高。
keySet()是返回此映射中包含的键的 Set 视图,entrySet()返回此映射中包含的映射关系的 Set 视图。追问

那为什么 Struts2 选择 keySet() ?

以上是关于关于Java的Map的主要内容,如果未能解决你的问题,请参考以下文章

关于java object对象中的map取值问题。。。

关于java的Map中put()的问题

关于java里Map的value 相同的个数的问题?

关于java的容器类 list,map等的toString()方法

关于Java Map应该掌握的问题

关于java Map和Collection接口