当前位置: 移动技术网 > IT编程>开发语言>Java > JAVA遍历map的几种实现方法代码

JAVA遍历map的几种实现方法代码

2019年07月22日  | 移动技术网IT编程  | 我要评论

复制代码 代码如下:

public static void main(string args[]) {
  map<string, object> map = new hashmap<string, object>();
  map.put("a", "a");
  map.put("b", "b");
  map.put("c", "c");
  // keyset遍历
  iterator<string> iterator = map.keyset().iterator();
  while (iterator.hasnext()) {
    string key = iterator.next();
    string value = (string) map.get(key);
    system.out.println(value);
  }
  for (string key : map.keyset()) {
    string value = (string) map.get(key);
    system.out.println(value);
  }
  // entryset遍历
  iterator<entry<string, object>> iterator1 = map.entryset().iterator();
  while (iterator1.hasnext()) {
    string value = (string) iterator1.next().getvalue();
    system.out.println(value);
  }

  for (entry<string, object> entry : map.entryset()) {
    string value = (string) entry.getvalue();
    system.out.println(value);
  }
  //
  for (object str : map.values()) {
    system.out.println(str);
  }
}

关于效率问题:

如果你使用hashmap

同时遍历key和value时,keyset与entryset方法的性能差异取决于key的具体情况,如复杂度(复杂对象)、离散度、冲突率等。换言之,取决于hashmap查找value的开销。entryset一次性取出所有key和value的操作是有性能开销的,当这个损失小于hashmap查找value的开销时,entryset的性能优势就会体现出来。例如上述对比测试中,当key是最简单的数值字符串时,keyset可能反而会更高效,耗时比entryset少10%。总体来说还是推荐使用entryset。因为当key很简单时,其性能或许会略低于keyset,但却是可控的;而随着key的复杂化,entryset的优势将会明显体现出来。当然,我们可以根据实际情况进行选择
只遍历key时,keyset方法更为合适,因为entryset将无用的value也给取出来了,浪费了性能和空间。在上述测试结果中,keyset比entryset方法耗时少23%。
只遍历value时,使用vlaues方法是最佳选择,entryset会略好于keyset方法。

如果你使用treemap

同时遍历key和value时,与hashmap不同,entryset的性能远远高于keyset。这是由treemap的查询效率决定的,也就是说,treemap查找value的开销较大,明显高于entryset一次性取出所有key和value的开销。因此,遍历treemap时强烈推荐使用entryset方法。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网