2、若何解决:
p在有的翻译文档中叫桶, 一个桶可以装多个, 怎么装? 链表或者红黑树 。
3、下图代码中 else if 部门是红黑树
else 部门是链表 , 链表中若是冲突元素个>=TREEIFY_THRESHOLD-1,会将链表转换当作红黑树 。
因为元素个数良多时, 红黑树比链表机能更好 。
文章插图
5HashMap 是不是线程平安的, 若何解决线程平安问题?
1、HashMap 是线程不平安的
2、对整个map加锁 。
3、如图(3)对f加锁了, 就是对桶加锁, 就是传说中的分段锁机制 。
在包管平安的前提下, 加锁的规模越小, 则程序机能越高, 本身写代码时切记胡乱在方式上加synchronized
文章插图
文章插图
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 会有两个元素, 而我们期望的只保留一个 。
文章插图
7验证ConcurrentHashMap 线程平安 。
文章插图
文章插图
第三步: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");
推荐阅读
- javascript基础语法快速入门
- 如何应用JavaScript中的弹窗
- 转载 给Java小白的五个学习必经路线图
- 如何应用Javascript的调试命令
- JavaScript的网页本质
- JavaScript特殊字符运算
- java DataOutputStream与 DataInputStream
- java基础 20.1.3 where子句中的特殊条件
- java System类对IO的支持
- Java中 a++ 和 ++a 的区别