高性能网站开发 书籍,wordpress怎么制作订单号管理,深圳vi设计哪家好,广州冼村姓什么Map基本使用 通过一个特定的关键信息(键)去查询对应的值。使用List来实现存在效率非常低的问题#xff0c;因为平均需要扫描一半的元素才能确定#xff0c;而Map这种键值(key-value)映射表的数据结构#xff0c;作用就是能高效通过key快速查找value(元素) MapK,V是… Map基本使用 通过一个特定的关键信息(键)去查询对应的值。使用List来实现存在效率非常低的问题因为平均需要扫描一半的元素才能确定而Map这种键值(key-value)映射表的数据结构作用就是能高效通过key快速查找value(元素) MapK,V是一种键-值 映射表当我们调用put(Kkey,V value)方法时就把key和value做了映射并放入Map。当我们调用Vget(Kkey)时就可以通过key获取到对应的value。如果key不存在则返回nul1。和List类似Map也是一个接口最常用的实现类是HashMap。如果只是想查询某个key是否存在可以调用boolean containsKey(Kkey)方法。 重复放入key-va1ue并不会有任何问题但是一个key只能关联一个value。put()方法的签名是Vput(Kkey,V value),如果放入的key已经存在lput()方法会返回被删除的旧va1ue,否则返回null。Map中不存在重复的key,因为放入相同的key,只会把原有的key-value对应的va1ue给覆掉。 此外在一个Map中虽然key不能重复但value是可以重复的 Map和List不同的是Map存储都的是key-value的映射关系并且它不保证顺序。在遍历的时候遍历的顺序既不一定是put()时放入的key的顺序也不一定是key的排序顺序。使用Map时任何依赖顺序的逻辑都是不可靠的。以HashMap为例假设我们放入A,B,c这3个key,遍历的时候每个key会保证被遍历一次且仅遍历一次但顺序完全没有保证甚至不同的JDK版本相同的代码遍历的输出顺序都是不同的。
package com.xn.ffri;import java.util.HashMap;public class Fri06 {public static void main(String[] args) {//HashMap//KV键值对集合key唯一value允许重复HashMapString, Integer cityMapnew HashMapString, Integer();//put()方法添加键值对//如果key不存在键返回nullSystem.out.println(cityMap.put(X西安,11111));System.out.println(cityMap.put(C长沙,22222));System.out.println(cityMap.put(X厦门,33333));System.out.println(cityMap.put(W武汉,44444));//如果key存在则保存新value返回旧valueSystem.out.println(cityMap.put(X西安,11112));//int value1cityMap.get(C长沙);System.out.println(C长沙 value1);Integer value3cityMap.get(G贵阳);System.out.println(G贵阳 value3);int value2cityMap.get(G贵阳);System.out.println(G贵阳 value2);}
}package com.xn.ffri;import java.lang.reflect.Array;
import java.text.CollationElementIterator;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
import java.util.Set;public class Fri07 {public static void main(String[] args) {//歌手分类HashMapString, String[] map new HashMapString, String[]();map.put(华语, new String[] { 林俊杰, 陈奕迅, 邓紫棋, 薛之谦, 汪苏泷, 李荣浩 });map.put(欧美, new String[] { 贾斯丁比伯, 威肯, 艾兰沃克, 德雷克 });map.put(乐队, new String[] { 魔力红, 烟鬼组合, 共和时代, 辅音组合, Linkin Park, Westlife });//遍历Map//方式1获取所有的key然后按照每个key获取对应的keySetString keys map.keySet();//获取map中所有的keySystem.out.println(所有的keys: keys);IteratorString it keys.iterator();while (it.hasNext()) {String key it.next();//获取每个keyString[] val map.get(key);//按照key获取对应的valueSystem.out.printf(%s -- %s\n, key, Arrays.toString(val));}//方式2//根据key,获取value(数组)
// String[]arraymap.get(乐队)月
// for (String name array){
// System.out.println(name);
// }//获取所有的value//SetString keys map.keySet();获取所有的keyCollectionString[] valuesmap.values();for(String[] arr:values) {System.out.println(Arrays.toString(arr));}////方式3将每个KV键值对按照Entry类型对象统一获取SetEntryString,String[] entrysmap.entrySet();for(EntryString,String[] keyvalue:entrys) {System.out.printf(%s -- %s\n,keyvalue.getKey(),Arrays.toString(keyvalue.getValue()));}//判断key是否存在boolean ismap.containsKey(日韩);//根据key获取value,如果key不存在。则返回default默认值String[] valuemap.getOrDefault(日韩, new String[] {});//根据key删除KV键值对map.remove(欧美);//获取键值对的数量int sizemap.size();}
}小结 Map是一种映射表可以通过key快速查找value; 可以通过for each遍历keySet(),也可以通过for each遍历entryset(),直接获 取key-value键值对 最常用的一种Map实现是HashMap(无序key唯一) HashMap的数据结构采用数组链表红黑树 HashMap的按照key的hash值计算数组中的存储位置下标计算方式(n-1)hash。 如果在该下标位置已经存在元素代表产生哈希冲突则采用链地址法处理以单向链表的形 式将新元素存储在链表的尾部尾插法。 当链表中Node节点的数量大于8并且数组的长度大于64时链表会转换成一个红黑树有 利于查搜索。 HashMap的默认容量为16加载因子为0.75f,当集合元素个数超过扩容阈值容量*加 载因子)时HashMap会将底层数组容量按照2倍进行扩容。