南部网站建设,广州学网站开发,网站域名没有实名认证,Wordpress评论emojiMapMap接口键 值 对存储键不能重复#xff0c;值可以重复Map三个实现类的存储结构HashMap#xff1a;Hash表链表红黑树结构 线程不安全TreeMap#xff1a; 底层红黑树实现HashTable#xff1a;hash表链表红黑树 线程安全HashMapHashMap常用方法HashMapString,String值可以重复Map三个实现类的存储结构HashMapHash表链表红黑树结构 线程不安全TreeMap 底层红黑树实现HashTablehash表链表红黑树 线程安全HashMapHashMap常用方法 HashMapString,StringmapnewHashMap();
map.put(s,a);//添加元素是无序的,键可以重复值不可以重复
map.remove(s);//根据键可删除整个对
map.get(s);//根据键来找值返回的是value
map.containskey(s);//判断集合中是否有这个键
map.containsvalue(a);//判断集合中是否有这个值
SetStringksetmap.keyset();//单独将集合中的key这一列元素拿出来返回的是一个set集合
ListStringlistmap.Values();//将集合中value这一列元素拿出来返回的是一个list集合put方法添加元素整个过程以及底层存储结构重要底层结构哈希表数组链表红黑树数组主要用来定位元素位置hash值取余数组长度等于位置索引但有可能不同元素哈希值不同但算出位置一样此时使用链表来存储位置相同元素当链表长度等于8时将链表自动转换为红黑树当红黑树长度删减为6时又转回链表。数组的扩容机制hash表开始默认长度是16当元素占数组长度为0.75时这个倍数保证效率和空间不被浪费用一定的空间换取效率会对数组进行扩容操作扩容为原来的2倍。完整过程也是源码的完整过程当我们向hashMap集合中添加元素时判断重复后与hashSet去重方法一致因为其底层也是用hashmap存储的根据key值调用hash方法并不是hashcode方法它是hashMap类中的一个方法计算出此key在数组中的位置如果这个位置没有元素则直接添加若已经有了元素此时会有三种情况一是此位置存储的这个元素与新加的元素键相同但值不相同我们选择替换值二是此位置的元素为链表结构我们添加在链表尾还需要注意是否化为红黑树三是此位置的元素已经转为红黑树底层以树的方式添加注二三种情况也会有一出现具体也是要替换值在底层都有实现。put方法源码源码中的一些常量TreeMap底层是红黑树实现key所在类必须实现comparable接口可以按照值自然顺序排序也可指定也是键值两列其余与TreeSet类似HashTable是线程安全的其中不能存储key为null的对象具体可看源码且HashMap可以但只能存储一个键为null的元素底层也是hash结构链表红黑树但他是线程安全的在并发量较低的情况下。Map的遍历/Map集合迭代使用增强forSetStringkeysetmap.keySet();//先拿到键这一列
for(Stringkey: keyset){
System.out.println(keymap.get(key));//通过键找值
}2.建议的遍历方式,使用entrySetmap底层为了方便遍历将每个键值对都放入一个Entry对象中并将多个Entry对象放到一个set集合中SetEntryString,Stringentrysetmap.entry();
//拿到entry集合后我们遍历entryset这个集合就可以遍历map