2026/1/9 7:10:44
网站建设
项目流程
深圳那家做APP网站的最好,网络营销推广的方式包括,wordpress tint2.2,有经验的南昌网站设计Java内置的集合框架#xff0c;除了提供Collection单列集合外#xff0c;还提供所谓双列集合Map#xff0c;即所谓存储“键值对”的集合。键和值是两个对象#xff0c;而键值对在Java中称为entry。
与Collection相似#xff0c;Map是一个接口#xff0c;有HashMap、Linke…Java内置的集合框架除了提供Collection单列集合外还提供所谓双列集合Map即所谓存储“键值对”的集合。键和值是两个对象而键值对在Java中称为entry。与Collection相似Map是一个接口有HashMap、LinkedHashMap和TreeMap三种实现类这三种实现类与Set的三种实现类HashSet、LinkedHashSet和TreeSet在底层实现上相同。实际上Map只是比Set增加了一个“值对象”。准确来说HashSet的内部实现基于 HashMap将其值视为一个固定值。因此Map具有与Set相似特点不保证顺序、键不可重复但值可重复、不可索引。Map的方法与Set也很相似但是额外多了有关值的方法。Map常见方法如下Vput(Kkey,Vvalue);// 添加键值对如果键存在会返回旧值如果键不存在则返回nullVremove(Objectkey);// 删除键值对返回旧值。若键不存在则返回nullbooleanremove(Objectkey,Objectvalue);// 删除指定键值对voidclear();// 清空MapVget(Objectkey);// 获取指定键的值booleancontainsKey(Objectkey);// 是否包含键booleancontainsValue(Objectvalue);// 是否包含值intsize();// 元素数量booleanisEmpty();// 是否为空对常见方法的代码演示如下publicclassDemo0{publicstaticvoidmain(String[]args){// 创建Map集合对象MapString,StringmapnewHashMap();// boolean isEmpty(); 判断集合是否为空System.out.println(map.isEmpty());// true// V put(K key, V value); 添加键值对如果键存在会返回旧值,同时覆盖旧值如果键不存在则返回nullSystem.out.println(map.put(郭靖,黄蓉));// nullSystem.out.println(map.put(杨过,小龙女));// nullSystem.out.println(map.put(韦小宝,沐剑屏));// nullSystem.out.println(map.put(韦小宝,阿珂));// 沐剑屏System.out.println(map);// {郭靖黄蓉, 杨过小龙女, 韦小宝阿珂}// int size(); 获取键值对数量System.out.println(map.size());// 3System.out.println(map.isEmpty());// false// boolean containsKey(Object key); 判断集合中是否包含指定的键System.out.println(map.containsKey(郭靖));// trueSystem.out.println(map.containsKey(小龙女));// false// boolean containsValue(Object value); 判断集合中是否包含指定的值System.out.println(map.containsValue(阿珂));// trueSystem.out.println(map.containsValue(沐剑屏));// false// V remove(Object key); 删除键值对返回旧值。若键不存在则返回nullSystem.out.println(map.remove(郭靖));// 黄蓉System.out.println(map.remove(小龙女));// null}}Map的遍历有三种方式通过键找值获取Map中的所有key为新Set再通过key找到value。通过键值对获取Map中的键值对对象成一个新Set再遍历键值对对象找key、value。使用foreach方法用lamda表达式publicclassDemo1{publicstaticvoidmain(String[]args){// 创建Map集合MapString,StringmapnewHashMap();// 添加元素map.put(郭靖,黄蓉);map.put(杨过,小龙女);map.put(韦小宝,沐剑屏);// 遍历方法1 通过键找值获取Map中的所有key为新单列集合再通过key找到value。SetStringkeysmap.keySet();// keySet()方法获取Map中的所有key集合for(Stringkey:keys){Stringvaluemap.get(key);// get(key)方法通过key找到valueSystem.out.println(keyvalue);}System.out.println(---------分割线-----------);// 遍历方法2 通过键值对获取Map中的键值对对象成一个新单列集合再遍历键值对对象找key、value。SetMap.EntryString,Stringentriesmap.entrySet();// entrySet()方法获取Map中的键值对对象集合for(Map.EntryString,Stringentry:entries){Stringkeyentry.getKey();// Entry对象的getKey()方法获取keyStringvalueentry.getValue();// Entry对象的getValue()方法获取valueSystem.out.println(keyvalue);}System.out.println(---------分割线-----------);// 遍历方法3 通过foreach方法map.forEach((key,value)-System.out.println(keyvalue));}}HashMapHashMap是Map的实现类底层使用哈希表。HashMap与HashSet相似HashSet节点Node中存储的内容是元素本身而HashMap存储的内容是键值对对象又称为Entry对象。HashMap的元素插入逻辑将键和值两个对象组成一个键值对Entry对象用键调用hashCode()方法计算键的哈希值通过哈希值和哈希表数组的长度计算数组索引值若数组为null则存储键值对对象若数组不为null则调用equals()方法逐一判断链表中已存在的键值对的键是否相等若键相同则覆盖键值对对象若链表中的键都不同则最后插入到链表尾部。因此若用HashMap与HashSet相似需要重写键类的hashCode()和equals()方法。LinkedHashMapLinkedHashMap是Map的实现类底层使用哈希表。LinkedHashMap与HashMap的关系就跟LinkedHashSet与HashSet的关系相似LinkedHashMap是在HashMap的节点基础上增加了指向上一个插入元素Entry对象的节点和指向下一个插入元素Entry对象的节点。因此LinkedHashMap特点是有序、键不重复、不可索引。如下可以看出遍历获取的顺序与插入顺序相同publicclassDemo2{publicstaticvoidmain(String[]args){// 创建一个Map集合对象MapStudent,StringmapnewLinkedHashMap();// 添加三个元素map.put(newStudent(张三,18),成都);map.put(newStudent(李四,19),上海);map.put(newStudent(王五,20),北京);// 遍历键值对for(Map.EntryStudent,Stringentry:map.entrySet()){System.out.println(entry.getKey()entry.getValue());}}}Student{name张三,age18}成都 Student{name李四,age19}上海 Student{name王五,age20}北京 进程已结束退出代码为0TreeMapTreeMap是Map的实现类底层使用红黑树。TreeMap与TreeSet相似HashSet节点Node中存储的内容是元素本身而HashMap存储的内容是键值对对象又称为Entry对象。树这一数据结构要求存储的元素需要能够比较因此TreeMap存储的键值对对象的键也需要支持比较。