1.了解map集合,map集合都有哪些实现?
1.1 hashMap
1.2 hashTable
1.3 LinkedHashMap
1.4 TreeMap
1.5 ConcurrentHashMap
2.HashMap和HashTable之间的区别?
2.1 HashMap:底层基于数组+链表(红黑树),非线程安全,允许有空的键和值;
2.2 HashTable:底层基于哈希表实现的,线程安全,不允许有空的键和值;
2.3 HashMap继承自AbstractMap类,,而HashTable是继承自Dictionary类;
2.4 HashTable的初始容量为11,之后每次扩容,容量就变成了原来的2n+1;
2.5 HashMap的初始容量为16,之后每次扩容,容量就变成了原来的2倍;
3.hashCode()和equals()方法使用场景?
hashCode():顶级父类object当中的方法,返回值类型为int类型的值,根据一定的规则生成一个数组,数组保存的就是hash值;
equals():顶级父类object当中的方法,根据一定的比较规则,判断对象是否一致;
底层一般逻辑:
1.判断两个对象的内存地址是否一样;
2.非空判断和class类型判断;
3.强转;
4.对象中的字段一一匹配;
package com.wn.Test02; import java.util.Objects; public class Title { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public boolean equals(Object o) { //判断两个对象的内存地址是否一样 if (this == o) return true; //非空判断和class类型判断 if (o == null || getClass() != o.getClass()) return false; //强转 Title title = (Title) o; //对象中的字段一一匹配 return id == title.id && Objects.equals(name, title.name); } @Override public int hashCode() { return Objects.hash(id, name); } }
4.HashMap和TreeMap安排应该如何选择?
HashMap:底层采用数组+链表结构,可以实现快速的存储和检索,但是数据时无序的,适用于在map当中插入删除或者获取元素;
TreeMap:存储结构是一个平衡二叉树,具体实现方式为红黑树,默认采用自然排序,可以自定义排序规则,但是需要实现Comparator,能够便捷的实现内部元素的各种排序,但是性能比HashMa差,适用于按照具体自然排序和自定义排序规则;
5.Map和Set的关系?
Map是一组键值对的结构,具有极快的查找速度;
Set核心就是保存不重复的元素,存储一组唯一的对象;
Set当中每一种实现都对应Map;
HashSet对应的底层就是new HashMap,TreeSet对应的底层就是new TreeMap;
6.常见的Map排序规则
按照添加规则使用LinkedHashMap,按照自然排序或者自定义规则排序可以采用TreeMap
7.如何保证Map线程安全
多线程环境下,可以使用concurrent包下有一个ConcurrentHashMap或者是使用Collections.synchronizedList(new HashMap<K,V>());
ConcurrentHashMap保证线程安全,效率比HashTable高,采分段锁
8.HashMap底层源码剖析
8.1.介绍HashMap底层用到的数据结构
8.2.为什么采用红黑树,并且为什么临界值为8
8.3.put和get底层源码的核心流程
9.ConcurrentHashMap底层实现
1. JDK1.7和JDK1.8底层实现的区别
2. ConcurrentHashMap底层put方法实现的核心逻辑