自营购物网站建设,深圳网站建设案,网页模板的扩展名,ps网站头部图片目录Map集合体系一、Map集合的概述二、Map集合体系特点三、Map集合常用API四、Map集合的遍历4.1 Map集合的遍历方式一#xff1a;键找值4.2 Map集合的遍历方式二#xff1a;键值对4.3 Map集合的遍历方式三#xff1a;lambda表达式五、Map集合案例-统计投票人数六、Map集合的…
目录Map集合体系一、Map集合的概述二、Map集合体系特点三、Map集合常用API四、Map集合的遍历4.1 Map集合的遍历方式一键找值4.2 Map集合的遍历方式二键值对4.3 Map集合的遍历方式三lambda表达式五、Map集合案例-统计投票人数六、Map集合的实现类HashMap七、Map集合的实现类LinkedHashMap八、Map集合的实现类TreeMap九、集合的嵌套Map集合体系 一、Map集合的概述
Map集合是一种双列集合每个元素包含两个数据。 Map集合的每个元素的格式keyvalue(键值对元素)一一对应。 Map集合也被称为“键值对集合”。
Collection集合的格式: [元素1,元素2,元素3…]Map集合的完整格式{key1value1 , key2value2 , key3value3 , …}
二、Map集合体系特点
使用最多的Map集合是HashMap。
Map集合的特点都是由键决定的。Map集合的键是无序,不重复的无索引的值不做要求可以重复。Map集合后面重复的键对应的值会覆盖前面重复键的值。Map集合的键值对都可以为null。
Map集合实现类特点
HashMap:元素按照键是无序不重复无索引值不做要求。与Map体系一致LinkedHashMap:元素按照键是有序不重复无索引值不做要求。TreeMap元素按照建是排序不重复无索引的值不做要求。
三、Map集合常用API
Map是双列集合的祖宗接口它的功能是全部双列集合都可以继承使用的。
/**目标Map集合的常用API(重点中的重点)- public V put(K key, V value): 把指定的键与指定的值添加到Map集合中。- public V remove(Object key): 把指定的键 所对应的键值对元素 在Map集合中删除返回被删除元素的值。- public V get(Object key) 根据指定的键在Map集合中获取对应的值。- public SetK keySet(): 获取Map集合中所有的键存储到Set集合中。- public SetMap.EntryK,V entrySet(): 获取到Map集合中所有的键值对对象的集合(Set集合)。- public boolean containKey(Object key):判断该集合中是否有此键。- public boolean containValue(Object value):判断该集合中是否有此值。*/
public class MapDemo {public static void main(String[] args) {// 1.添加元素: 无序不重复无索引。MapString , Integer maps new HashMap();maps.put(iphoneX,10);maps.put(娃娃,20);maps.put(iphoneX,100);// Map集合后面重复的键对应的元素会覆盖前面重复的整个元素maps.put(huawei,100);maps.put(生活用品,10);maps.put(手表,10);// {huawei100, 手表10, 生活用品10, iphoneX100, 娃娃20}System.out.println(maps);// 2.清空集合
// maps.clear();
// System.out.println(maps);// 3.判断集合是否为空为空返回true ,反之System.out.println(maps.isEmpty());// 4.根据键获取对应值:public V get(Object key)Integer key maps.get(huawei);System.out.println(key);System.out.println(maps.get(生活用品)); // 10System.out.println(maps.get(生活用品2)); // null// 5.根据键删除整个元素。(删除键会返回键的值)System.out.println(maps.remove(iphoneX));System.out.println(maps);// 6.判断是否包含某个键 包含返回true ,反之System.out.println(maps.containsKey(娃娃)); // trueSystem.out.println(maps.containsKey(娃娃2)); // falseSystem.out.println(maps.containsKey(iphoneX)); // false// 7.判断是否包含某个值。System.out.println(maps.containsValue(100)); //System.out.println(maps.containsValue(10)); //System.out.println(maps.containsValue(22)); //// {huawei100, 手表10, 生活用品10, 娃娃20}// 8.获取全部键的集合public SetK keySet()SetString keys maps.keySet();System.out.println(keys);System.out.println(------------------------------);// 9.获取全部值的集合CollectionV values();CollectionInteger values maps.values();System.out.println(values);// 10.集合的大小System.out.println(maps.size()); // 4// 11.合并其他Map集合。(拓展)MapString , Integer map1 new HashMap();map1.put(java1, 1);map1.put(java2, 100);MapString , Integer map2 new HashMap();map2.put(java2, 1);map2.put(java3, 100);map1.putAll(map2); // 把集合map2的元素拷贝一份到map1中去System.out.println(map1);//{java3100, java21, java11}System.out.println(map2);//{java3100, java21}
}四、Map集合的遍历
4.1 Map集合的遍历方式一键找值
方式一键找值的方式遍历先获取Map集合全部的键再根据遍历键找值。
/**目标Map集合的遍历方式一键找值a.“键找值”的方式遍历Map集合。1.先获取Map集合的全部键的Set集合。2.遍历键的Set集合然后通过键找值。小结代码简单需要记住!*/
public class MapDemo01 {public static void main(String[] args) {MapString , Integer maps new HashMap();// 1.添加元素: 无序不重复无索引。maps.put(娃娃,30);maps.put(iphoneX,100);maps.put(huawei,1000);maps.put(生活用品,10);maps.put(手表,10);System.out.println(maps);// maps {huawei1000, 手表10, 生活用品10, iphoneX100, 娃娃30}// 1、键找值第一步先拿到集合的全部键。SetString keys maps.keySet();// 2、第二步遍历每个键根据键提取值for (String key : keys) {int value maps.get(key);System.out.println(key value);}}
}4.2 Map集合的遍历方式二键值对
方式二键值对的方式遍历把“键值对“看成一个整体难度较大。
/**目标Map集合的遍历方式。b.“键值对”的方式遍历1.把Map集合转换成一个Set集合:SetMap.EntryK, V entrySet();2.此时键值对元素的类型就确定了类型是键值对实体类型Map.EntryK, V3.接下来就可以用foreach遍历这个Set集合类型用Map.EntryK, V*/
public class MapDemo02 {public static void main(String[] args) {MapString , Integer maps new HashMap();// 1.添加元素: 无序不重复无索引。maps.put(娃娃,30);maps.put(iphoneX,100);maps.put(huawei,1000);maps.put(生活用品,10);maps.put(手表,10);System.out.println(maps);// maps {huawei1000, 手表10, 生活用品10, iphoneX100, 娃娃30}/**maps {huawei1000, 手表10, 生活用品10, iphoneX100, 娃娃30}使用foreach遍历map集合.发现Map集合的键值对元素直接是没有类型的。所以不可以直接foreach遍历集合。可以通过调用Map的方法 entrySet把Map集合转换成Set集合形式 maps.entrySet();SetMap.EntryString,Integer entries maps.entrySet();[(huawei1000), (手表10), (生活用品10), (iphoneX100), (娃娃30)]entry此时可以使用foreach遍历*/// 1、把Map集合转换成Set集合SetMap.EntryString, Integer entries maps.entrySet();// 2、开始遍历for(Map.EntryString, Integer entry : entries){String key entry.getKey();int value entry.getValue();System.out.println(key value);}}
}4.3 Map集合的遍历方式三lambda表达式
方式三JDK 1.8开始之后的新技术Lambda表达式。
/**目标Map集合的遍历方式。c.JDK 1.8开始之后的新技术Lambda表达式。*/
public class MapDemo03 {public static void main(String[] args) {MapString , Integer maps new HashMap();// 1.添加元素: 无序不重复无索引。maps.put(娃娃,30);maps.put(iphoneX,100);// Map集合后面重复的键对应的元素会覆盖前面重复的整个元素maps.put(huawei,1000);maps.put(生活用品,10);maps.put(手表,10);System.out.println(maps);// maps {huawei1000, 手表10, 生活用品10, iphoneX100, 娃娃30}// maps.forEach(new BiConsumerString, Integer() {
// Override
// public void accept(String key, Integer value) {
// System.out.println(key --- value);
// }
// });maps.forEach((k, v) - {System.out.println(k --- v);});}
}五、Map集合案例-统计投票人数
需求 某个班级80名学生现在需要组成秋游活动班长提供了四个景点依次是A、B、C、D,每个学生只能选择一个景点请统计出最终哪个景点想去的人数最多。
/**需求统计投票人数*/
public class MapTest1 {public static void main(String[] args) {// 1、把80个学生选择的数据拿进来。String[] selects {A , B, C, D};StringBuilder sb new StringBuilder();Random r new Random();for (int i 0; i 80; i) {sb.append(selects[r.nextInt(selects.length)]);}System.out.println(sb);// 2、定义一个Map集合记录最终统计的结果 A30 B20 C20 D10 键是景点 值是选择的数量MapCharacter, Integer infos new HashMap(); //// 3、遍历80个学生选择的数据for (int i 0; i sb.length(); i) {// 4、提取当前选择景点字符char ch sb.charAt(i);// 5、判断Map集合中是否存在这个键if(infos.containsKey(ch)){// 让其值 1infos.put(ch , infos.get(ch) 1);}else {// 说明此景点是第一次被选infos.put(ch , 1);}}// 4、输出集合System.out.println(infos);}
}六、Map集合的实现类HashMap
HashMap是Map里面的一个实现类。特点都是由键决定的无序、不重复、无索引没有额外需要学习的特有方法直接使用Map里面的方法就可以了。HashMap跟HashSet底层原理是一模一样的都是哈希表结构只是HashMap的每个元素包含两个值而已。
实际上Set系列集合的底层就是Map实现的只是Set集合中的元素只要键数据不要值数据而已
HashMap的特点和底层原理
由键决定无序、不重复、无索引。HashMap底层是哈希表结构的。依赖hashCode方法和equals方法保证键的唯一。如果键要存储的是自定义对象需要重写hashCode和equals方法。基于哈希表。增删改查的性能都较好。
七、Map集合的实现类LinkedHashMap
由键决定有序、不重复、无索引。这里的有序指的是保证存储和取出的元素顺序一致原理底层数据结构是依然哈希表只是每个键值对元素又额外的多了一个双链表的机制记录存储的顺序
八、Map集合的实现类TreeMap
由键决定特性不重复、无索引、可排序可排序按照键数据的大小默认升序有小到大排序。只能对键排序。注意TreeMap集合是一定要排序的可以默认排序也可以将键按照指定的规则进行排序 TreeMap跟TreeSet一样底层原理是一样的。
TreeMap集合自定义排序规则有2种
类实现Comparable接口重写比较规则。集合自定义Comparator比较器对象重写比较规则。
九、集合的嵌套
需求不同在于可以选多个景点 某个班级多名学生现在需要组成秋游活动班长提供了四个景点依次是A、B、C、D,每个学生可以选择多个景点请统计出最终哪个景点想去的人数最多。 /**需求统计投票人数*/
public class MapTest4 {public static void main(String[] args) {// 1、要求程序记录每个学生选择的情况。// 使用一个Map集合存储。MapString, ListString data new HashMap();// 2、把学生选择的数据存入进去。ListString selects new ArrayList();Collections.addAll(selects, A, C);data.put(罗勇, selects);ListString selects1 new ArrayList();Collections.addAll(selects1, B, C , D);data.put(胡涛, selects1);ListString selects2 new ArrayList();Collections.addAll(selects2 , A, B, C , D);data.put(刘军, selects2);System.out.println(data);// 3、统计每个景点选择的人数。MapString, Integer infos new HashMap(); // {}// 4、提取所有人选择的景点的信息。CollectionListString values data.values();System.out.println(values);// values [[A, B, C, D], [B, C, D], [A, C]]// valuefor (ListString value : values) {for (String s : value) {// 有没有包含这个景点if(infos.containsKey(s)){infos.put(s, infos.get(s) 1);}else {infos.put(s , 1);}}}System.out.println(infos);}
}