集合面试题之双列集合Map

一.了解Map集合吗?Map集合都有哪些实现

HashMap 、HashTable、    LinkedHashMap 、TreeMap、   ConcurrentHashMap

HashMap底层数据结构是哈希表,所以其特点是元素无序且唯一(自定义对象需要重写hashCode和equals方法保证他的唯一性)

Hashtable它和HashMap类很相似,但是它支持同步,Hashtable在哈希表中存储键/值对,当使用一个哈希表,要指定用作键的对象,以及要链接到该键的值。

然后,该键经过哈希处理,所得到的散列码被用作存储在该表中值的索引。

LinkedHashMap 是 Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。

TreeMap底层数据结构是红黑树,可以对元素进行排序

ConcurrentHashMap是Java并发包中提供的一个线程安全且高效的HashMap实现

因为Map集合也是一个接口,所以利用抽象类多态实现对象的创建,其中的String泛型指的就是键,Student泛型指的就是值,通常统称为一个键值对。

Map集合的数据结构之和键有关,和值无关。

二.HashMap和HashTable之间的区别
1.HashMap:底层基于数组+单向链表(红黑树),非线程安全,默认容量为16,允许有空的键和值
数组:Node<K,V> [] table ,每一个元素都是一个Node
单向链表:Node<K,V> next,当发生Hash碰撞,会追加链表,当链表长度大于8,那就转换为红黑树

2.HashTable:底层基于哈希表实现,线程是安全的,默认容量为11,不允许有空的键和值

三.hashCode()和equals()方法使用场景
hashCode():顶级父类Object当中的方法,返回值类型为int类型的值,根据一定的规则(存储地址,字段,长度等等)生成一个数组,数据保存的就是Hash值
equals():顶级类Object中的方法,根据一定的比较规则,判断对象是否一致,底层一般逻辑:
1.判断两个对象的内存地址是否一样
2.非空判断和Class类型判断
3.强转
4.对象中的字段一一匹配

四.HashMap和TreeMap应该如何选择
HashMap:底层采用数组+链表(红黑树)结构,可以实现快速的存储和检索,但是数据是无序的,适用于在Map当中插入删除或者获取元素

TreeMap: 存储结构是一个平衡二叉树,具体实现方式为红黑树,默认采用自然排序,可以自定义排序规则,但是需要实现Comparator接口
能够便捷的实现内部元素的各种排序,但是性能比HashMap差,适用于按照自然排序和自定义排序规则

五.Set和Map的关系
Set核心就是保存不重复的元素,存储一组唯一的对象
Set当中每一种实现都对应Map
HashSet对应的HashMap,TreeSet对应的TreeMap

六.常见的Map排序规则
按照添加规则使用LinkedHashMap,按照自然排序或者自定义规则排序可以采用TreeMap

七.如何保证Map线程安全
多线程环境下,可以使用concurrent包下有一个ConcurrentHashMap或者是使用Collections.synchronizedList(new HashMap<K,V>());

ConcurrentHashMap保证线程安全,效率比HashTable高,采分段锁

八.HashMap底层源码剖析
1.介绍HashMap底层用到的数据结构

2.为什么采用红黑树,并且为什么临界值为8

3.put和get底层源码的核心流程

九.ConcurrentHashMap底层实现
1. JDK1.7和JDK1.8底层实现的区别

2. ConcurrentHashMap底层put方法实现的核心逻辑

原文地址:https://www.cnblogs.com/wishsaber/p/12500008.html

时间: 2024-11-12 12:32:47

集合面试题之双列集合Map的相关文章

双列集合框架:Map(个人理解)

双列集合框架:Map1.常用实现类结构|----Map:双列数据,存储key-value对的数据 ---类似于高中的函数:y = f(x)* |----HashMap:作为Map的主要实现类:线程不安全的,效率高:存储null的key和value* |----LinkedHashMap:保证在遍历map元素时,可以照添加的顺序实现遍历.* 原因:在原的HashMap底层结构基础上,添加了一对指针,指向前一个和后一个元素.* 对于频繁的遍历操作,此类执行效率高于HashMap.* |----Tre

java018.双列集合Map

day18双列集合MapMap接口和Collection接口的区别: * Map是双列的,Collection是单列的 * Map的键唯一,Collection的子体系Set是唯一的,List体系可以存储重复值 * Map集合的数据结构值针对键有效,跟值无关;Collection集合的数据结构是针对元素有效 * a:添加功能  * V put(K key,V value):添加元素.   * 如果键是第一次存储,就直接存储元素,返回null   * 如果键不是第一次存在,就用值把以前的值替换掉,

双列集合Map及实现该接口的类的常用方法

为什么要学双列集合? 因为单列集合无法处理映射关系,会有成对出现的数据 Map接口  如果是实现了Map接口的集合类,具备的特点: 存储的数据都是以键值对的形式存在的,键不可重复,值可以重复 Map接口的方法:   添加:    put(K key, V value)     putAll(Map<? extends K,? extends V> m)    删除    remove(Object key)     clear()   获取:    get(Object key)     si

Map集合(双列集合)

Map集合(双列集合)Map集合是键值对集合. 它的元素是由两个值组成的,元素的格式是:key=value. Map集合形式:{key1=value1 , key2=value2 , key3=value3 , .. } * Map集合系列: Map<K,V>(接口) / HashMap<K,V>(实现类) / LinkedHashMap<K,V>注意:Map集合只支持引用数据类型的元素存储. Map集合特点: 键是无序不重复的. 重复的键,后面加入的会直接覆盖前面.

JAVA双列集合HashMap

HashMap 双列集合HashMap是属于java集合框架3大类接口的Map类,   Map接口储存一组成对的键-值对象,提供key(键)到value(值)的映射.Map中的key不要求有序,不允许重复.value同样不要求有序,但允许重复. Iterator接口是负责定义访问和遍历元素的接口 1. 使用Iterator迭代器缺点: 1. ListIterator有add()方法,可以向List中添加对象,而Iterator不能 2. ListIterator和Iterator都有hasNex

集合(三)------双列集合

所谓双列集合就是存在映射关系并且是成对存在的. 双列集合体系: -------------| Map  如果是实现了Map接口的集合类,具备的特点: 存储的数据都是以键值对的形式存在的,键不可重复,值可以重复.----------------| HashMap  底层也是基于哈希表实现 的.----------------| TreeMap   TreeMap也是基于红黑树(二叉树)数据结构实现 的, 特点:会对元素的键进行排序存储.----------------| Hashtable 和ha

获取单列集合,双列集合,数组的Stream流对象以及简单操作

获取流对象 获取单列集合,双列集合,数组的流对象 单列集合获取流对象: 1.java.util.Collection接口中加入了default方法stream()获取流对象,因此其所有实现类均可通过此方式获取流. public class StreamTest01 { List<String> list = new ArrayList<>(); Stream<String> stream1 = list.stream(); Set<String> set =

Collection单列集合 Map双列集合

Map集合:该集合存储键值对,一对一对往里存.而且要保证键的唯一性. 1.添加 put(K key, V value) putAll(Map<? extends K,? extends V> m) 2.删除 clear() remove(Object key) 3.判断 containsKey(Object key) containsValue(Object value) isEmpty() 4.获取 get(Object key) :获取值 size() values() entrySet(

双列集合map-1

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是