java HashMap( 二 )


2、若何解决:
p在有的翻译文档中叫桶, 一个桶可以装多个, 怎么装? 链表或者红黑树 。
3、下图代码中 else if 部门是红黑树
else 部门是链表 , 链表中若是冲突元素个>=TREEIFY_THRESHOLD-1,会将链表转换当作红黑树 。
因为元素个数良多时, 红黑树比链表机能更好 。

java HashMap

文章插图

5HashMap 是不是线程平安的, 若何解决线程平安问题?
1、HashMap 是线程不平安的
2、对整个map加锁 。
3、如图(3)对f加锁了, 就是对桶加锁, 就是传说中的分段锁机制 。
在包管平安的前提下, 加锁的规模越小, 则程序机能越高, 本身写代码时切记胡乱在方式上加synchronized

java HashMap

文章插图

java HashMap

文章插图

6HashMap 和 hash()  equals() 方式的关系
1、面试中面试官会问重写equals()方式要注重是什么, 谜底是hash()也要重写 。
不重写会引起HashMap 等调集类利用的紊乱 。
2、如下图:好比类Person(id,name), 重写了 equals(Object obj){... reutrn this.id==obj.id}, 没有重写hash(), 那么从类界说上来说, 只要id相等就是统一小我, 当我们Person作为key, 放入两个Person对象(id相等)到HashMap的时辰, 那么就翻车了, HashMap 会有两个元素, 而我们期望的只保留一个 。

java HashMap

文章插图

7验证ConcurrentHashMap 线程平安 。

java HashMap

文章插图

java HashMap

文章插图

第三步:HashMap利用实例1常用根基操作
package com.pichen.collection;


import java.util.HashMap;
import java.util.Map;


public class Main {


    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<String, Integer>();
【java HashMap】

        //put方式
        map.put("A", 5);
        map.put("B", 6);
        map.put("C", 7);
        map.put("D", 8);
        
        //重写了toString方式
        System.out.println(map);
        
        //size方式
        System.out.println(map.size());
        
        System.out.println(map.containsKey("A"));
        System.out.println(map.containsValue(6));
        System.out.println(map.get("B"));
        
        //remove
        map.remove("C");

推荐阅读