面试题

蜜源

(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。

希望本文章对您有帮助,您的转发、点赞是我的创作动力,十分感谢。更多好文推荐,请关注我的微信公众号--JustJavaIt
原文地址:https://www.cnblogs.com/liaowenhui/p/15049197.html