android 变量Map集合

来源:互联网 发布:照片数字识别软件 编辑:程序博客网 时间:2024/06/10 05:34


今天,简单讲讲android如何遍历Map集合。


这个其实很简单,但是之前忘记了,查找资料才记起的,所以记录一下。


以下是map遍历的四种方式:

// 一、推荐只用value的时候用,都懂的。。。  // Map.values()遍历所有的value,不遍历key  for (String v : map.values()) {      System.out.println("value= " + v);  } 


// 二、取二次值,先取key再取value,建议只需要用key的时候使用,节省时间、空间  // keySet遍历key和value  for (String key : map.keySet()) {      System.out.println("key= "+ key + " and value= " + map.get(key));  }


// 三、取一次值,一次把key和value全部取出  // entrySet使用iterator遍历key和value  Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();  while (it.hasNext()) {      Map.Entry<String, String> entry = it.next();      System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());  }


// 四、推荐,尤其是容量大时,TreeMap尤其推荐  // entrySet遍历key和value  for (Map.Entry<String, String> entry : map.entrySet()) {      System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());  } 


五.不使用泛型:

Map map = new HashMap();Iterator entries = map.entrySet().iterator();while (entries.hasNext()) {    Map.Entry entry = (Map.Entry) entries.next();    Integer key = (Integer)entry.getKey();    Integer value = (Integer)entry.getValue();    System.out.println("Key = " + key + ", Value = " + value);}



通过键找值遍历(效率低)

Map<Integer, Integer> map = new HashMap<Integer, Integer>();for (Integer key : map.keySet()) {    Integer value = map.get(key);    System.out.println("Key = " + key + ", Value = " + value);}


作为方法一的替代,这个代码看上去更加干净;但实际上它相当慢且无效率。因为从键取值是耗时的操作(与方法一相比,在不同的Map实现中该方法慢了20%~200%)。如果你安装了FindBugs,它会做出检查并警告你关于哪些是低效率的遍历。所以尽量避免使用。


3. 结论
3.1 如果你使用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方法。


这里是从网上找到的资料,有兴趣的可以自己去查找别人的资料。


android 变量Map集合就讲完了。


就这么简单。


原创粉丝点击