面试题---集合框架篇

1.ArrayList、Vector、LinkedList、HashSet、TreeSet、HashMap、TreeMap的区别
Collection中包含了List和Set
List:分为ArrayList、Vector、LinkedList,是有序可重复的集合
ArrayList:数组,查询快,增删慢,线程不安全,效率高,扩容增长为原来的1.5倍
Vector:数组,查询快,增删慢,线程安全,效率低,扩容为原来的2倍
LinkedList:链表,查询慢,增删快,线程不安全,效率高
Set:HashSet、TreeSet,是无序不可重复的集合,存的话相同的值会添加失败,取值通过迭代遍历获取
HashSet:线程不安全,效率高,底层采用了Map
TreeSet:线程安全,效率低
Map:采用Key-Value存储值
HashMap:Key不可重复,value可以重复,线程不安全,效率高,允许value中为null
TreeMao:线程安全,效率低,不允许value中有null
以上的线程不安全可以通过Collections类的synchronized方法来转为线程安全
2.==和equals的区别
是比较两个变量的值是否相等,比较内存中存储的值是否相等,如果是基本类型只能用比较,如果是对象,则比较地址值是否相等
equals是比较两个独立对象的内容是否相等,不是比较地址值,是比较内容
3.hashMap底层原理说明
1.8后采用数组链表加红黑树的组合,原始桶数为16,节点上含有hashCode,key,value,next四个内容
1.当存一个key-value时,首先计算key的hashCode,然后做位与运算,计算出数组下标,判断该数组是否存有内容;
2.如果该位置没有值,可以直接将值存入
3.如果该位置有值,判断key值是否一致,
4.如果key值一致,覆盖原来key对应的value值,
5.如果key不一致,转为链表结构,链接到数组下面,判断数组的长度
6.如果长度小于8,则开始本轮添加结束
7.如果长度大于等于8,数组扩容,变为原来的2倍,重新计算存储信息
8.如果数组长度大于64,且链表长度大于等于8,链表开始变为红黑树,如果长度小于6,红黑树转为链表
9.如果数组长度大于等于0.75倍的数组长度,数组扩容,如果长度为64,开始放入链表

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值