JAVA容器常见面试题(自答版)

本文详细探讨了JAVA容器中的常见面试问题,包括Collection和Collections的区别,JAVA容器类型如List、Queue、Set和Map的实现类及其特性。重点讲解了ArrayList、LinkedList、HashMap、TreeMap和ConcurrentHashMap的内部实现与优化策略,如扩容机制、线程安全以及平衡二叉树的概念,如AVL树和红黑树。同时,介绍了fail-fast机制在多线程环境下的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Collection和Collections的区别

Collection是一个集合接口,提供了对集合对象进行基本操作的通用接口方法

Collections是集合类的一个工具类,提供了一系列静态方法,用于对集合中元素进行排序,搜索以及线程安全等各种操作

2.JAVA容器都有哪些

List:Vector,ArrayList,LinkedList,CopyOnWriteArrayList

Queue:PriorityQueue

Set:HashSet,TreeSet

Map:HashMap,TreeMap,ConcurrentHashMap

3.常见数据结构的原理

List篇:

Vector:内部通过数组实现,支持线程的同步,某一时刻只能有一个线程能够写Vector,因此它是线程安全的,但访问慢

ArrayList:最常用的List实现类,内部通过数组实现,默认大小为10,当数组大小不足时会触发扩容机制,通过Arraylist.ensureCapacity()扩容出新数组,新数组大概在原数组大小的1.5倍左右,然后会通过Array.copyOf()方法将原数组内容拷贝过去

LinkedList:用双向链表储存数据,适合数据的动态插入和删除,访问数据很慢(时间复杂度O(n)),适合写多读少的场景

CopyOnWriteArrayList:写时复制,当加入元素时不会直接在原数组操作,而是新复制一份数组,在新数组进行操作,再将原数组指向新数组,因此是线程安全的,但是每次写入都会复制数组,开销比较大,建议对需添加的元素累计后批量加入

Queue篇:队列是先进先出的数据结构,只允许在表的一端进行获取操作,另一端进行插入操作,此FIFO特性和阻塞特点常用于作为Buffer(缓冲区)

Map篇:

HashMap:内部通过数组+链表+红黑树(JDK8之后)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

社会的大D

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值