Java 集合知识点的面试问题

1.Java中的集合分类

集合框架由Collection接口和Map接口组成。
其中Colelection接口中有两个子接口Set接口和List接口

主要的实现类有以下
Map接口:HashMap,TreeMap,HashTable,ConcurrentHashMap等
Set接口:HashSet,TreeSet,LinkHashSet等
List接口:ArrayList,LinkList,Vector,Stack
(List和Set的区别是一个是有序可重复元素,一个无序无重复元素)

框架图(百度剽窃来的)
在这里插入图片描述
在这里插入图片描述

2.HashMap和HashTable的区别

1.HashMap线程不安全,HashTable线程安全,用Synchronized修饰方法。
2.HashMap允许key=null,HashTable不允许。

3.HashMap底层实现

JDK8之前是 数组+链表
JDK8之后是 数组+链表+红黑树

4.ConcurrentHashMap和HashTable的区别

ConcurrentHashMap集合了HashTable和HashMap的优点,即线程安全,同时效率比HashTable高
原因是ConcurrentHashMap的锁是更加细粒度,而HashTable的锁是锁住整个对象。
ConcurrentHashMap的锁是分离锁,读操作不加锁,写操作则是将整张表分离成不同的锁,所以允许多个写操作。

数据结构是采用segment进行分段(每一段一个锁),每一段作为一个HashTable,所以需要进行两次hash,第一次确定segment,第二次确定在HashTable中的位置。(最高的并发写操作线程数是segment段数)(jdk1.7)

jdk1.7和jdk1.8的实现方式不同
<jdk1.7>:数组(Segment) + 数组(HashEntry) + 链表(HashEntry节点)
<jdk1.8> : 使用 Node数组+链表+ 红黑树(锁是每个数组元素的链表头结点)

5.HashMap的长度为什么是2的幂次方

1.最大化空间利用率
元素映射方式是 hash&length-1,长度是2的幂次方,则length-1的二进制是1111…1的类型,也就是hash与之后得到的映射结果是在0到length-1之间都有可能,也就是HashMap的空间理论上是都可以利用,如果不是2的幂次方,二进制就会有0位,该位的&结果一定是0,无法映射到对应的位置为1的情况。浪费了空间。

2.速度快
如果 length 为 2 的次幂 则 length-1 转化为二进制必定是 11111……的形式,在于 h 的二进制与操作效率会非常的快。(比除余数快)

6.Comparable接口和Comparator接口的区别

1.Comparable接口是需要比较对象实现的接口,也就是需要改变源码。(形容词)
2.Compartor接口是作为一个比较器来实现的,不需要改变比较对象源码。(名词)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值