动易网站后台修改栏目的字wordpress 图片管理系统
动易网站后台修改栏目的字,wordpress 图片管理系统,网站设计 注意,莱芜融媒体中心网站由于很久没有进行javase的语法学习#xff0c;对于HashMap中的键值对操作有些不熟悉#xff0c;使用ai帮我重温了一下#xff0c;于是便有了这篇博客 #x1f4da; 目录#xff08;点击跳转对应章节#xff09;
一、最推荐#xff1a;遍历 entrySet#xff08;同时获取…由于很久没有进行javase的语法学习对于HashMap中的键值对操作有些不熟悉使用ai帮我重温了一下于是便有了这篇博客 目录点击跳转对应章节一、最推荐遍历entrySet同时获取键 值效率最高1. 增强 for 循环JDK 5简洁易读2. 迭代器JDK 5显式控制遍历流程二、仅遍历键keySet或仅遍历值values1. 仅遍历键keySet2. 仅遍历值values三、JDK 8 简化写法forEach 方法Lambda 表达式1. 同时遍历键 值推荐2. 仅遍历键/值结合 Stream四、各遍历方式对比选型参考五、注意事项总结在 Java 中遍历哈希表核心实现为HashMap的键和值有多种方式适配不同的 JDK 版本和使用场景如仅遍历键、仅遍历值、同时遍历键值对。下面按常用程度 易用性排序讲解每种遍历方式的写法、适用场景和注意事项。核心前提HashMap实现了Map接口遍历的核心是利用Map提供的三类视图keySet()获取所有键的Set集合values()获取所有值的Collection集合entrySet()获取所有键值对Map.Entry的Set集合最推荐的全量遍历方式。一、最推荐遍历entrySet同时获取键 值效率最高entrySet()直接返回键值对的集合只需一次遍历即可同时获取key和value避免了“先遍历键再通过get(key)查值”的二次哈希查找效率最优是全量遍历键值对的首选。1. 增强 for 循环JDK 5简洁易读importjava.util.HashMap;importjava.util.Map;publicclassMapTraversal{publicstaticvoidmain(String[]args){HashMapString,IntegerscoreMapnewHashMap();scoreMap.put(张三,90);scoreMap.put(李四,85);scoreMap.put(王五,95);// 遍历 entrySet同时获取 key 和 valuefor(Map.EntryString,Integerentry:scoreMap.entrySet()){Stringkeyentry.getKey();// 获取键Integervalueentry.getValue();// 获取值System.out.println(键key值value);}}}输出键张三值90 键李四值85 键王五值952. 迭代器Iterator遍历支持删除元素若遍历过程中需要安全删除元素避免ConcurrentModificationException需用迭代器importjava.util.HashMap;importjava.util.Iterator;importjava.util.Map;publicclassMapTraversal{publicstaticvoidmain(String[]args){HashMapString,IntegerscoreMapnewHashMap();scoreMap.put(张三,90);scoreMap.put(李四,85);scoreMap.put(王五,95);// 迭代器遍历 entrySetIteratorMap.EntryString,IntegeriteratorscoreMap.entrySet().iterator();while(iterator.hasNext()){Map.EntryString,Integerentryiterator.next();Stringkeyentry.getKey();Integervalueentry.getValue();// 示例删除值 90 的键值对if(value90){iterator.remove();// 安全删除continue;}System.out.println(键key值value);}System.out.println(删除后的哈希表scoreMap);// {张三90, 王五95}}}二、仅遍历键keySet或仅遍历值values若只需单独处理键或值无需同时获取用keySet()或values()更简洁。1. 仅遍历键keySetHashMapString,IntegerscoreMapnewHashMap();scoreMap.put(张三,90);scoreMap.put(李四,85);// 增强 for 循环遍历键for(Stringkey:scoreMap.keySet()){System.out.println(键key);}// 迭代器遍历键支持删除IteratorStringkeyIteratorscoreMap.keySet().iterator();while(keyIterator.hasNext()){StringkeykeyIterator.next();if(key.equals(李四)){keyIterator.remove();// 删除键对应的键值对也会被删除}}2. 仅遍历值valuesHashMapString,IntegerscoreMapnewHashMap();scoreMap.put(张三,90);scoreMap.put(李四,85);// 增强 for 循环遍历值for(Integervalue:scoreMap.values()){System.out.println(值value);}// 迭代器遍历值注意无法直接通过值删除键值对IteratorIntegervalueIteratorscoreMap.values().iterator();while(valueIterator.hasNext()){IntegervaluevalueIterator.next();if(value85){// 错误示例valueIterator.remove() 会导致异常或不一致// 正确做法建议改用 entrySet 迭代器通过键删除}}三、JDK 8 简化写法forEach 方法Lambda 表达式JDK 8 新增的forEach方法Map接口默认方法用 Lambda 表达式简化遍历代码最简洁。1. 同时遍历键 值推荐HashMapString,IntegerscoreMapnewHashMap();scoreMap.put(张三,90);scoreMap.put(李四,85);// forEach Lambda 遍历键值对scoreMap.forEach((key,value)-{System.out.println(键key值value);// 支持修改值需重新 putif(key.equals(张三)){scoreMap.put(key,value5);// 张三的分数改为 95}});System.out.println(修改后的哈希表scoreMap);// {张三95, 李四85}2. 仅遍历键/值结合 Stream// 仅遍历键stream 过滤scoreMap.keySet().stream().filter(key-key.startsWith(张)).forEach(key-System.out.println(过滤后的键key));// 仅遍历值stream 求和inttotalScorescoreMap.values().stream().mapToInt(Integer::intValue).sum();System.out.println(总分totalScore);// 示例180四、各遍历方式对比选型参考遍历方式适用场景效率支持删除JDK 版本entrySet增强 for同时遍历键值无需删除最高不支持5entrySet迭代器同时遍历键值需删除元素最高支持1.2keySet仅遍历键或通过键查值较低二次哈希支持1.2values仅遍历值中等不推荐1.2forEachLambda简洁遍历无需复杂逻辑同 entrySet不支持需手动 put/remove8五、注意事项无序性HashMap遍历顺序不保证与插入顺序一致若需保留插入顺序使用LinkedHashMap遍历方式完全相同线程安全非线程安全的HashMap在多线程遍历/修改时需加锁如synchronized或使用ConcurrentHashMap禁止遍历中修改增强 for 循环遍历中直接put/remove会抛出ConcurrentModificationException需用迭代器或ConcurrentHashMap自定义对象作为键若键是自定义对象需重写hashCode()和equals()否则遍历可能出现异常如重复键。总结优先选entrySet增强 for / 迭代器→ 效率最高支持同时获取键值对JDK 8 首选forEach(Lambda)→ 代码最简洁仅需键/值keySet()/values()→ 简化代码需删除元素entrySet迭代器 → 安全无异常。