Java基础教程之HashMap迭代删除使用方法

 更新时间:2019年05月30日 08:35:23   作者:小灰灰Blog  
这篇文章主要给大家介绍了关于Java基础教程之HashMap迭代删除使用方法的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

前言

map的迭代删除,和我们常见的list,set不太一样,不能直接获取Iteraotr对象,提供的删除方法也是单个的,根据key进行删除,如果我们有个需求,将map中满足某些条件的元素删除掉,要怎么做呢?

I. Map 迭代删除

迭代删除,在不考虑并发安全的前提下,我们看下可以怎么支持

1. 非常不优雅版本

我们知道map并不是继承自Collection接口的,HashMap 也没有提供迭代支持,既然没法直接迭代,那我就老老实的low b版好了

Map<String, Integer> map = new HashMap<>();
map.put("a", 1);
map.put("b", 2);
map.put("c", 3);
map.put("d", 4);

List<String> removeKey = new ArrayList<>();
for (Map.Entry<String, Integer> e: map.entrySet()) {
  if (e.getValue() % 2== 0) {
    removeKey.add(e.getKey());
  }
}
removeKey.forEach(map::remove);

上面的实现怎么样?并没有什么毛病

(为啥不直接在遍历中删除?)

2. 正确姿势版

虽然Map没有迭代,但是它的entrySet有啊,所以我们可以通过它来实现遍历删除

Map<String, Integer> map = new HashMap<>();
map.put("a", 1);
map.put("b", 2);
map.put("c", 3);
map.put("d", 4);

Iterator<Map.Entry<String, Integer>> iterator = map.entrySet().iterator();
Map.Entry<String, Integer> entry;
while (iterator.hasNext()) {
  entry = iterator.next();
  if (entry.getValue() % 2 == 0) {
    iterator.remove();
  }
}
System.out.println(map);

上面这个可能是我们经常使用的操作姿势了,利用迭代器来操作元素

3. 简洁版

到jdk8之后,针对容器提供了很多简洁的操作方式,迭代删除这方面可以说更加简单了

Map<String, Integer> map = new HashMap<>();
map.put("a", 1);
map.put("b", 2);
map.put("c", 3);
map.put("d", 4);
map.entrySet().removeIf(entry -> entry.getValue() % 2 == 0);

4. 其他

尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。

相关文章

  • 深入解析HashMap的put方法

    深入解析HashMap的put方法

    在Java集合中,HashMap的重要性不言而喻,作为一种存储键值对的数据结构,它在日常开发中有着非常多的应用场景,也是面试中的高频考点,本篇文章就来分析一下HashMap集合中的put方法
    2022-01-01
  • Java NIO实现聊天系统

    Java NIO实现聊天系统

    这篇文章主要为大家详细介绍了Java NIO实现聊天系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • 使用ByteArrayOutputStream写入字符串方式

    使用ByteArrayOutputStream写入字符串方式

    这篇文章主要介绍了使用ByteArrayOutputStream写入字符串方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • 利用mysql实现的雪花算法案例

    利用mysql实现的雪花算法案例

    这篇文章主要介绍了利用mysql实现的雪花算法案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • Java使用ES Client 调用滚动查询及Elasticsearch滚动查询Scrolling机制

    Java使用ES Client 调用滚动查询及Elasticsearch滚动查询Scrolling机制

    Elasticsearch提供了一种称为"滚动查询"(Scrolling)的机制,用于处理大型数据集的分页查询,这篇文章给大家介绍滚动查询的一般步骤及Java使用ESClient调用滚动查询的方法,感兴趣的朋友一起看看吧
    2023-08-08
  • idea快速生成代码配置的方法示例

    idea快速生成代码配置的方法示例

    本文主要介绍了idea快速生成代码配置的方法示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • 为什么禁止在SpringBoot项目中使用@Autowired注解

    为什么禁止在SpringBoot项目中使用@Autowired注解

    写代码的时候突然发现 idea 在属性注入的 @Autowired 注解上给出警告提示,spring framework 4.0 以后开始出现的,spring 4.0 开始就不推荐使用属性注入,改为推荐构造器注入和 setter 注入,推荐的方法是使用基于构造函数和基于setter的依赖注入
    2024-08-08
  • SpringBoot中的事务全方位详解

    SpringBoot中的事务全方位详解

    这篇文章主要介绍了SpringBoot中的事务全方位详解,在Spring中,事务有两种实现方式,分别是编程式事务管理和声明式事务管理两种方式,文中举例详细说明了这两种事务,需要的朋友可以参考下
    2023-08-08
  • Java实现每日给女友微信发送早安信息

    Java实现每日给女友微信发送早安信息

    这篇文章主要为大家详细介绍了Java如何实现每日给女友微信发送早安等微信信息,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以了解一下
    2022-12-12
  • Mybatis批量插入,返回主键ID不成功,巨坑记录

    Mybatis批量插入,返回主键ID不成功,巨坑记录

    这篇文章主要介绍了Mybatis批量插入,返回主键ID不成功,巨坑记录,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12

最新评论