Map集合(双列集合)
Map结合也称为“键值对集合”,格式:{key1=value1,key2=value2....}
Map集合的特点:
键唯一:在Map集合中,键(key)是唯一的,不能有重复的键。如果尝试插入一个已经存在的键,新的值会覆盖旧的值。
值可重复:与键不同,值(value)可以重复。键和值时一一对应的,每个键只能找到自己对应的值。
Map集合的常用方法:
Map是双列集合的祖宗,它的功能是全部双列集合都可以继承过来使用的。
常用实现类:
1.HashMap(由键决定特点):无序、不重复、无索引;
2.LInkedHashMap(由键决定特点):有序、不重复、无索引;
3.TreeMap(由键决定特点):按默认大小升序、不重复、无索引;
Map集合的遍历方式:
1.键找值:先获取Map集合全部的键,再通过遍历键来找值。
通过Set集合存储Map集合所有的键,然后再通过遍历Set集合提取值
2.键值对:把"键值对"看成一个整体进行遍历
Map提供的方法:Set<Map.Entry<K(类型),V(类型)> entrySet()> 获取所有键值对的集合(Map.Entry<K,V>是一个整体类型)
也就是这个方法将Map集合中的键值对包装成一个整体对象存到成Set集合,用getKey()和getValue()两个方法获取键值对。
3.Lambda表达式:jdk1.8开始之后的新技术(简单)
需要用到的方法:default void forEach(BiConsumer<? super K,? super V> action)结合lambda遍历Map集合。
代码演示:
public class test1 {public static void main(String[] args) {Map<String,Integer> map = new HashMap<>();map.put("小王",18);map.put("小李",19);map.put("小张",20);map.put("小宋",19);map.put("小王",19);System.out.println(map);//System.out.println(map.get("小王"));Set<String> set = map.keySet();//1.键找值将map的键添加到set中,遍历setfor(String key:set){System.out.print(key+"="+map.get(key)+" ");}//2.键值对:Set<Map.Entry<String,Integer>> entrySet= map.entrySet();for(Map.Entry<String,Integer> entry:entrySet){System.out.print(entry.getKey()+"="+entry.getValue()+" ");}System.out.println();//3.Lambda表达式:map.forEach(new BiConsumer<String, Integer>() {@Overridepublic void accept(String s, Integer integer) {System.out.print(s+"="+integer);}});//简化后map.forEach((s,integer)-> System.out.print(s+"="+integer));}
}
Map常用集合的实现类
底层实现原理本质上和Set集合一样,实际上:原来学的Set系列集合的底层就是基于Map实现的,只是Set集合中的元素只要键数据,不要值数据而已
HashSet底层原理是HashMap
LinkedHashSet底层原理是LinkedHashMap
TreeSet底层原理是TreeMap