蜜源
(1)HashMap 与 HashTable 的对比?
YY
(1)HashMap 1.7, 1.8 的主要区别, 除了树化,扩容后不需要重新计算hash 还有什么?
(2)ConcurrentHashMap 1.7 与 1.8 的区别, 1.7 的分段锁,分了多少段呢? 1.8 还有化了什么
CVTE
(1)hashmap 扩容机制,为什么要在0.75的时候扩容?
(2)Set集合中元素不重复的特性?
底层实际将将该元素作为key放入HashMap
由于HashMap的put()方法添加key-value对时,当新放入HashMap的Entry中key与集合中原有Entry的key相同,新添加的Entry的value会将覆盖原来Entry的value,但key不会有任何改变,
因此如果向HashSet中添加一个已经存在的元素时,新添加的集合元素将不会被放入HashMap中,原来的元素也不会有任何改变,这也就满足了Set中元素不重复的特性
钱大妈,小迈网络
(1)ArrayList和LinkList的区别?底层结构是怎样的?
(2)Map有哪些?线程安全是哪一个?
通天晓
(1)linklist和arraylist的区别?arraylist怎么扩容的?
(2)了解hashmap吗?
其他:
(1)HashMap 底层实现原理是什么?JDK8 做了哪些优化?为什么要添加红黑树?
(2)JDK1.8HashMap扩容时做了哪些优化?
(3)加载因子是什么?为什么是0.75?
(4)HashMap 是如何导致死循环的?
(5)当有哈希冲突时,HashMap是如何查找并确认元素的?
(6)HashMap 为什么是线程不安全的?
数组和链表的区别?
1、内存占用
①数组需要连续的内存空间
②链表不需要连续的内存空间
2、结构大小
①数组大小固定,不可动态改变
②链表大小可动态变化
3、增删查
①数组查询速度快(下标),增删速度慢(移动大量元素)
②链表增删速度快(修改引用),查询速度慢(遍历)
4、访问方式
①数组可根据下标随机访问
②链表只能顺序遍历访问,不能随机访问
arrayList 和linkList区别?
(1) ArrayList是实现了基于动态数组的数据结构,LinkedList是实现了基于链表的数据结构。
(2) 对于添加、删除元素,LinedList比较占优势,因为ArrayList要移动大量数据。
(3) 对于遍历和查找元素,ArrayList比较快(下表),因为LinkedList需要从头开始遍历。
arraylist怎么扩容的?
ArrayList扩容增加原来的0.5倍。
了解hashmap吗?
(1) 非线程安全的
(2) HashMap允许记录的键为null(最多一条记录),值为null(允许多条记录)
(3) HashMap中数组的默认大小是16,而且一定是2的倍数,扩容后的数組长度是之前数组长度的2倍(扩容倍数是2)。
(4) 在 JDK 1.7 中 HashMap 是以数组加链表的形式组成的,JDK 1.8 之后新增了红黑树的组成结构,当链表长度大于 8 时,链表结构会转换成红黑树结构(红黑树具有快速增删改查的特点)。
(5) 扩容因子是0.75
Map有哪些?线程安全是哪一个?
HashMap, 线程安全的是HashTable,SynchronizedMap,ConcurrentHashMap
HashMap、Hashtable、ConccurentHashMap三者的区别
HashMap线程不安全,数组+链表+红黑树
Hashtable线程安全,锁住整个对象,数组+链表
ConccurentHashMap线程安全,CAS+同步锁,数组+链表+红黑树
HashMap的key,value均可为null,其他两个不行。
HashTable效率低的原因么?
HashMap和Hashtable的区别?
ArrayList和Vector的区别
首先,这两个类都实现了List接口(List接口继承了Collection接口),是有序集合,相当于一种动态的数组,能够通过索引(元素在List中位置,类似于数组的下标)来访问元素,并且其中的数据是允许重复的。
区别主要包括两个部分:
(1)同步性:
Vector是线程安全的,而ArrayList是非线程安全的,所以如果不是要求线程安全的情况下,最好使用ArrayList,效率会高些。
(2)数据增长:
ArrayList与Vector都有一个初始的容量大小,当存储超过了容量时,就需要增加ArrayList与Vector的存储空间,Vector默认增长原来的一倍,ArrayList增加原来的0.5倍。
HashMap和Hashtable的区别
(1) HashMap 是非线程安全的,HashTable 是线程安全的,所以 HashTable 的效率比不上 HashMap;
(2) HashMap允许记录的键为null(最多一条记录),值为null(允许多条记录),而 HashTable不允许;
(3) HashMap中数组的默认大小是16,而且一定是2的倍数,扩容后的数組长度是之前数组长度的2倍。HashTable中数组默认大小是11.扩容后的数组长度是之前数组长度的2倍+1。