【从零开始学Java | 第二十六篇】双列集合(Map)
目录前言一、双列集合的特点1. 键值对Key-Value存储2. 键Key的唯一性3. 值Value的可重复性4. 单向的映射关系5. 顺序的差异化根据具体实现类而定二、双列集合Map常用的APIput(K key, V value)三、Map的遍历方式1.键找值遍历2.键值对遍历3.Lambda表达式前言在之前学习了单列集合Collection接口现在我们要学习的是Map双列集合我们常说的双列集合通常指的是基于Map接口实现的数据结构。与单列集合如List、Set每次只存入一个独立元素不同双列集合每次存储的都是一对具有关联关系的数据。一、双列集合的特点1. 键值对Key-Value存储这是双列集合最本质的特征。集合中的每一个元素实际上是一个Entry条目它包含两个部分Key键数据的唯一标识类似于数据库中的主键、学生的学号或字典里的单词。Value值与键相关联的具体数据类似于学生的具体档案或字典里单词的解释。2. 键Key的唯一性在一个双列集合中绝对不允许存在两个完全相同的 Key。如果你尝试向集合中添加一个已经存在的 Key系统不会报错而是会用新的 Value 覆盖掉旧的 Value。举例如果你先存入了001, 张三随后又存入001, 李四那么键001对应的值就会被更新为李四。3. 值Value的可重复性虽然 Key 必须唯一但不同的 Key 可以映射到完全相同的 Value。举例001, 北京和002, 北京可以和谐地共存于同一个集合中两个不同工号的员工都在北京分公司。4. 单向的映射关系每个 Key最多只能映射到一个确定的 Value你通过 Key 可以极快地查找到对应的 Value但通常不能直接通过 Value 反向高效地查找 Key。如果你需要一个 Key 对应多个数据通常需要将 Value 设置为一个单列集合例如MapString, ListString。5. 顺序的差异化根据具体实现类而定双列集合本身不保证元素的顺序具体是否有序取决于你使用的底层实现类无序集合如最常用的HashMap它存取元素的顺序是不一致的但它的查找和插入效率最高。插入有序如LinkedHashMap它可以保证你遍历集合时元素会按照你当初存入的顺序输出。大小有序如TreeMap它会根据 Key 的自然顺序或者你指定的比较器对所有的键值对进行自动排序。二、双列集合Map常用的API方法名说明V put(K key, V value)添加元素V remove(Object key)根据键删除键值对元素void clear()移除所有键值对元素boolean containsKey(Object key)判断集合是否包含指定的键boolean containsValue(Object value)判断集合是否包含指定的值boolean isEmpty()判断集合是否为空int size()集合的长度也就是集合中键值对的个数put(K key, V value)put方法的细节添加/覆盖在添加数据的时候如果键不存在那么直接把键值对对象添加到map集合中方法返回null如果键已经存在那么会把原有的键值对对象覆盖会把覆盖的值进行返回。public class Test { public static void main(String[] args) { MapString, Integer m new HashMap(); Integer value1 m.put(张三, 18); System.out.println(value1); m.put(李四, 20); m.put(王五, 22); Integer value2 m.put(王五, 25); System.out.println(value2); System.out.println(m); } }三、Map的遍历方式Map有三种遍历方式键找值键值对Lambda表达式1.键找值遍历主要是通过get(K key)方法通过键获取对应的值。public class Test { public static void main(String[] args) { MapString, Integer m new HashMap(); m.put(张三, 18); m.put(李四, 20); m.put(王五, 22); //将map中的键放入单列集合中 SetString s m.keySet(); //通过单列集合中的键找值 s.forEach(key- { Integer value m.get(key); System.out.println(key value); }); } }2.键值对遍历核心思路是通过获取Map集合中的entry来间接获取键和值。public class Test { public static void main(String[] args) { MapString, Integer m new HashMap(); m.put(zhangsan, 13); m.put(lisi, 24); m.put(wangwu, 35); //通过键值对遍历 SetMap.EntryString, Integer entries m.entrySet(); for (Map.EntryString, Integer entry : entries) { String key entry.getKey(); int value entry.getValue(); System.out.println(key value); } } }3.Lambda表达式public class Test { public static void main(String[] args) { MapString, String m new HashMap(); m.put(2026001, 张三); m.put(2026002, 李四); m.put(2026003, 王五); m.forEach(new BiConsumerString, String() { Override public void accept(String key, String value) { System.out.println(key value); } }); } }
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2483554.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!