【2019秋冬】【面经】Java集合

10 篇文章 0 订阅
6 篇文章 0 订阅

Java容器结构
collection接口和map接口下

collection接口下有list,set
list:ArrayList,LinkedList,vector,stack
set:HashSet,TreeSet

map接口下有HashMap,HashTable,ConcurrentHashMap

Collection

Collection 和 Collections 有什么区别?
collection是一个接口,list,set等都是继承了这个接口
collections是一个工具类,包含一些静态方法可以调用使用

List、Set、Map 之间的区别是什么?
元素是否有序,是否允许重复(有不有序指的是存入顺序,不是值)
list允许重复,有序
set不允许重复,无序(TreeSet有序,二叉树存储)
map key值唯一,value可以重复,无序(TreeMap有序,二叉树存储)

ArrayList 和 LinkedList 的区别是什么?
1.ArrayList是数组实现的,LinkedList是链表实现的
2.ArrayList可以快速定位查找,不方便进行插入删除
3.LinkedList方便进行插入删除,不方便查找

如何实现数组和 List 之间的转换?
array.asList(array)
list.toArray()

ArrayList 和 Vector 的区别是什么?
都是用数组实现的,但是ArrayList不同步,不安全,Vector支持同步,是安全的,两个线程可以同时访问一个Vector。但当只有一个线程的时候,Vector性能没有ArrayList高
Vector扩容直接扩1倍,ArrayList扩50%

Array 和 ArrayList 有何区别?
1.ArrayList可以扩容,Array大小固定
2.array能存储基本数据类型和对象,ArrayList只能存储对象
3.ArrayList内置方法比array多

在 Queue 中 poll()和 remove()有什么区别?
都是返回第一个值,并删除
当值不存在时poll返回NULL,remove会抛出异常

Map

HashMap的实现原理
HashMap底层采用数组链表方式存储数据,将传入的key值通过哈希函数计算,将得到的哈希值与数组长度减一做异或,存入对应的数组中,如果要存储的地方已经有值了,看是否相等,如果相等直接覆盖,不相等通过拉链法解决,就是在对应数组下增加链表存储
1.8之前的哈希值计算与1.7有区别,1.8的计算更简洁,原理相同
1.8之后在解决哈希冲突时,如果链表长度超过了阈值(默认8),自动变为红黑树结构

HashMap长度为什么是2的幂次?
为了减少数据存放的冲突,因为在计算下标时采用的是(数组长度-1)异或 哈希值,当数组长度是2的幂次时,数组长度-1 异或 比 取余操作更快,效果相同

HashMap为什么线程不安全?
因为HashMap没有加锁,在哈希冲突或者扩容的时候会不安全,扩容时会形成环形链表

HashMap的key可以为任意对象或数据类型吗?
可以为NULL,但不能为可变对象,否则无法准确查找value

HashSet的实现原理
HashSet底层是HashMap,个别函数自己定义,只存储对象,不是键值对形式
扩容时按指定值扩大,HashMap是扩大二倍(2的幂次)

HashTable的实现原理
和HashMap类似,不支持空值,没有红黑树优化,增加了锁来保证线程安全

ConcurrentHashMap的实现原理
1.7的ConcurrentHashMap采用分段和数组形式,每一段有一个单独的锁,每一段里维护一个数组,和HashMap结构一样,当访问数据时,只调用所在段的锁,其他段可以正常使用,提高了效率
1.8的ConcurrentHashMap去掉了分段,采用节点数组,链表,红黑树结构,在每一个节点加一个锁,调用数组只使用当前节点的锁,效率更高

HashMap 和 Hashtable 有什么区别?
1.HashMap线程不安全,HashTable线程安全
2.HashMap允许空值(key只能有一个),HashTable不允许空值
2.HashMap的效率更高一些
3.HashTable已经不建议使用,如果希望线程安全可以用ConcurrentHashMap

HashMap 和 HashSet 有什么区别?
1.HashSet的底层是用HashMap实现的,但是HashSet内不能有重复元素
2.HashMap实现Map接口,HashSet实现Set接口
3.HashMap存储键值对,HashSet存储单个对象

ConcurrentHashMap 和 HashTable 有什么区别?
1.ConcurrentHashMap锁机制与HashTable不同,ConcurrentHashMap锁见上,HashTable对整个数组上锁,效率低
2.ConcurrentHashMap地层结构与HashMap不同,ConcurrentHashMap1.7底层为分段数组,链表,1.8底层为数组,链表,红黑树,HashTable是数组,链表

如何决定使用 HashMap 还是 TreeMap?
如果希望根据key值遍历,就是用TreeMap
如果只是插入,删除,定位,用HashMap更快

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值