Java之HashMap多种方式遍历、动态删除

遍历HashMap

Map<Integer, String> map = new HashMap<>();
map.put(1, "aaa");
map.put(2, "bbb");
map.put(3, "ccc");
map.put(4, "ddd");
  1. 普遍使用,二次取值

    for(String key : map.keySet()){
          
          
        System.out.println(key + ":" + map.get(key));
    }
    
  2. 迭代器 entrySet

    Iterator<Map.Entry<Integer, String>> mapiter = map.entrySet().iterator();
    while(mapiter.hasNext()) {
          
          
    	@SuppressWarnings("unchecked")
    	Map.Entry<Integer, String> entry = mapiter.next();
    	System.out.println(entry.getKey() + ": " + entry.getValue());
    }
    
  3. 推荐,尤其是容量大时

    for(Map.Entry<Integer, String> entry : map.entrySet()) {
          
          
    	System.out.println(entry.getKey() + ": " + entry.getValue());
    }
    
  4. 遍历所有的value,但不能遍历key

    for(String str : map.values()) {
          
          
    	System.out.println(str);
    }
    
  5. 迭代器keySet

    Iterator<Integer> iter = map.keySet().iterator();
    while(iter.hasNext()) {
          
          
    	int key = iter.next();
    	System.out.println(key + ": " + map.get(key));
    }
    
  6. lambda表达式

    map.forEach((key, value) ->{
          
          
    	System.out.println(key + ": " + value);
    });
    
  7. Streams API单线程

    map.entrySet().stream().forEach((entry) ->{
          
          
    	System.out.println(entry.getKey() + ": " + entry.getValue());
    });
    

Iterator遍历之动态删除

Map<Integer, String> map = new HashMap<>();
map.put(1, "aaa");
map.put(2, "bbb");
map.put(3, "ccc");
map.put(4, "ddd");
Iterator<Integer> iter = map.keySet().iterator();
while(iter.hasNext()) {
    
    
	int key = iter.next();
	System.out.println(key + ": " + map.get(key));
	if(key == 2) {
    
    
		iter.remove();
	}
}
Iterator<Map.Entry<Integer, String>> mapiter = map.entrySet().iterator();
while(mapiter.hasNext()) {
    
    
	@SuppressWarnings("unchecked")
	Map.Entry<Integer, String> entry = mapiter.next();
	System.out.println(entry.getKey() + ": " + entry.getValue());
	if(entry.getKey() == 2) {
    
    
		mapiter.remove();
	}
}

Arrays.asList()

使用工具类Arrays.asList()把数组转换成集合时,不能使用其修改集合相关的方法,它的add/remove/clear方法会抛出UnsupportedOperationException异常

说明】asList()的返回对象是一个Arrays内部类,并没有实现集合的修改方法。Arrays.asList体现的是适配器模式,只是转换接口,后台的数据仍是数组

注意

  • 传递的数组必须是对象数组,而不是基本类型
  • 使用集合的修改方法add()/remove()/clear()会抛出异常
  • List<String> list = new ArrayList<String>(Arrays.asList("aaa", "bbb", "ccc"))

猜你喜欢

转载自blog.csdn.net/weixin_44368437/article/details/113062703