Collection容器 高频面试题

本文深入探讨了Java集合框架中的ArrayList和LinkedList的区别,包括它们的数据结构、增删改查操作的时间复杂度以及内存占用。同时,分析了HashMap与HashTable的异同,涉及线程安全、效率、键值对处理及容量调整策略。最后,对比了HashMap与HashSet的实现接口、存储方式和添加元素的差异。
摘要由CSDN通过智能技术生成
1 ArrayListLinkedList的区别
  • 都是线程不同步的

  • ArrayList底层使用的是Object数组,LinkedList使用的是双向链表

  • 增加和删除,当执行普通的增加和删除时,其时间复杂度近似o(1),当指定位置插入/删除时,ArrayList其时间复杂度近似o(n-1),因为其后面的元素需要向后移/向前移,LinkedList的时间复杂度近似o(n)

  • 是否支持快速随机访问,ArrayList由于底层是数组,天然的支持随机访问。LinkedList底层是联表,访问某个具体的元素的时候需要循环,所以在访问效率上,前者更加高效

  • 内存空间占用,ArrayList的空间浪费主要体现在list列表的结尾都会预留一定的容量空间,而LinkedList的每一个元素都要放一个前驱和后继,所以每一个元素都比ArrayList消耗更大的空间

2 HashMapHashTable的区别
  • 线程安全:HashMap是线程不安全的,HashTable是线程安全的,但是一般在并发中使用concuuentHashMap
  • 效率问题:由于锁的问题,hashmao的效率比hashtable的高
  • null key和null value:HashMap可以允许存在唯一null 键和多个null值,但是hashtable不允许,会报空指针异常
  • 初始化容量大小和扩容量大小不同:hashmap初始容量为16 扩容每次为之前的2n(tableSizeFor方法保证了是2的幂次方) ,hashtable初始容量为11 ,每次扩容为之前的2n+1
  • 底层数据结构:hashmap使用的是数组加链表的结构,在链表的长度大于8(阈值)的时候,将链表转化为红黑树,如果链表的长度小于64会先对数组进行扩容,而不是转化红黑树,转化红黑树可以减少搜索时间,hashtable没有这样的机制
3 HashMap和HashSet区别
  • 实现的接口不同,前者实现的是map接口,后者实现的是set接口
  • 前者储存的是键值对,后者储存的是对象
  • 前者使用key计算hashcode 后者使用成员对象计算
  • 添加元素的方式,前者是put 后者是add
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值