遍历HashMap

遍历HashMap

HashMap?


炎炎设计
浏览 479回答 3
3回答

明月笑刀无情

如果您只对键感兴趣,则可以遍历keySet()地图:Map<String, Object> map = ...;for (String key : map.keySet()) {     // ...}如果您只需要这些值,请使用values():for (Object value : map.values()) {     // ...}最后,如果要同时使用键和值,请使用entrySet():for (Map.Entry<String, Object> entry : map.entrySet()) {     String key = entry.getKey();     Object value = entry.getValue();     // ...}请注意:如果要在迭代过程中删除项,则需要通过Iterator进行删除。

慕神8447489

从引用中提取如何在Java中迭代Map:有几种方法可以迭代Map在爪哇。让我们回顾一下最常用的方法,并回顾它们的优缺点。由于Java中的所有映射都实现了Map接口,所以以下技术将适用于任何地图实现(HashMap, TreeMap, LinkedHashMap, Hashtable等等)方法1使用for-each循环迭代条目。这是最常见的方法,在大多数情况下更可取。如果您需要循环中的映射键和值,则应该使用它。Map<Integer, Integer> map = new HashMap<Integer, Integer>();for (Map.Entry<Integer, Integer> entry : map.entrySet()) {     System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());}请注意,for-each循环是在Java 5中引入的,因此该方法仅适用于新版本的语言。每个循环都会抛出NullPointerException如果您试图在一个为空的映射上迭代,那么在迭代之前,您应该始终检查空引用。方法2:使用for-each循环迭代键或值。如果只需要映射中的键或值,则可以迭代键集或值,而不是entrySet。Map<Integer, Integer> map = new HashMap<Integer, Integer>();// Iterating over keys onlyfor (Integer key : map.keySet()) {     System.out.println("Key = " + key);}// Iterating over values onlyfor (Integer value : map.values()) {     System.out.println("Value = " + value);}这种方法比传统的方法具有较小的性能优势。entrySet迭代(大约快10%)并且更干净。方法3使用Iterator进行迭代。使用泛型:Map<Integer, Integer> map = new HashMap<Integer, Integer>();Iterator<Map.Entry<Integer, Integer>> entries = map.entrySet() .iterator();while (entries.hasNext()) {     Map.Entry<Integer, Integer> entry = entries.next();     System.out.println("Key = " + entry.getKey() + ", 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);}您也可以使用相同的技术来迭代。keySet或者价值观。这种方法看起来可能是多余的,但它有自己的优点。首先,它是在旧版本的Java中迭代映射的唯一方法。另一个重要的特性是,它是允许您在迭代期间通过调用iterator.remove()..如果您在每次迭代中尝试这样做,您将得到“不可预测的结果”。从性能的角度来看,此方法等于for-每一次迭代。方法4迭代键和搜索值(效率低下)。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);}这可能看起来是方法1的一个更干净的替代方案,但实际上它非常慢,而且效率很低,因为通过键获取值可能很费时(在不同的Map实现中,这种方法比方法1慢20%-200%)。如果安装了FindBugs,它将检测到这一点,并警告您注意效率低下的迭代。这种方法应该避免。结论:如果只需要映射中的键或值,请使用方法2。如果您使用了Java的旧版本(小于5),或者计划在迭代期间删除条目,则必须使用方法3。否则使用方法1。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java