Java容器常见⾯试题
1. Java 容器都有哪些?
Java 容器分为 Collection 和 Map 两⼤类,其下⼜有很多⼦类,如下所⽰是Collection和Map的继承体系:
2. 具体如下结构:
Collection
List
ArrayList
LinkedList
Vector
Stack
Set
HashSet
LinkedHashSet
TreeSet
Map
HashMap
LinkedHashMap
TreeMap
ConcurrentHashMap
Hashtable
2. ArrayList和LinkList的区别?
1. ArrayList(数组结构):
1. 优点:get和set调⽤花费常数时间,也就是查询的速度快
2. 缺点:新项的插⼊和现有项的删除代价昂贵,也就是添加删除的速度慢
2. LinkedList(链表结构):
java常见笔试题1. 优点:新项的插⼊和和现有项的删除开销很⼩,即添加和删除的速度快
2. 缺点:对get和set的调⽤花费昂贵,不适合做查询
3. ⾯试中经常问到⼀些深⼊的东西,⽐如:
1. 是否保证线程安全: ArrayList 和 LinkedList 都是不同步的,也就是不保证线程安全;
2. 底层数据结构: Arraylist 底层使⽤的是Object数组;LinkedList 底层使⽤的是双向循环链表数据结构;
3. 插⼊和删除是否受元素位置的影响: ① ArrayList 采⽤数组存储,所以插⼊和删除元素的时间复杂度受元素位置的影响。 ⽐
如:执⾏add(E e)⽅法的时候, ArrayList 会默认在将指定的元素追加到此列表的末尾,这种情况时间复杂度就是O(1)。但是如果要在指定位置 i 插⼊和删除元素的话(add(int index, E element))时间复杂度就为 O(n-i)。因为在进⾏上述操作的时候集合中第 i 和第 i 个元素之后的(n-i)个元素都要执⾏向后位/向前移⼀位的操作。 ② LinkedList 采⽤链表存储,所以插⼊,删除元素时间复杂度不受元素位置的影响,都是近似 O(1)⽽数组为近似 O(n)。
4. 是否⽀持快速随机访问: LinkedList 不⽀持⾼效的随机元素访问,⽽ArrayList 实现了RandmoAccess 接⼝,所以有随机访
问功能。快速随机访问就是通过元素的序号快速获取元素对象(对应于get(int index)⽅法)。
5. 内存空间占⽤: ArrayList的空间浪费主要体现在在list列表的结尾会预留⼀定的容量空间,⽽LinkedList的空间花费则体现在
它的每⼀个元素都需要消耗⽐ArrayList更多的空间(因为要存放直接后继和直接前驱以及数据)。
3. List、Set、Map 之间的区别是什么?
1. List、Set、Map 的区别主要体现在两个⽅⾯:元素是否有序、是否允许元素重复。
2. 三者之间的区别,如下表:
18原码的计算方法4. HashMap 和 Hashtable 有什么区别?
1. 存储:HashMap 运⾏ key 和 value 为 null,⽽ Hashtable 不允许。
2. 线程安全:Hashtable 是线程安全的,⽽ HashMap 是⾮线程安全的。
transport用小技巧背3. 推荐使⽤:在 Hashtable 的类注释可以看到,Hashtable 是保留类不建议使⽤,推荐在单线程环境下使⽤ HashMap 替代,如果需
要多线程使⽤则⽤ ConcurrentHashMap 替代。
5. Comparable和Comparator区别?
1. Comparable接⼝
1. 实现Comparable接⼝类表⽰这个类型的对象可以进⾏⽐较⼤⼩的。 这种可以⽐较⼤⼩的对象可以进⾏⾃然排序。
2. Comparator接⼝
1. ⽐较器⽤于实现对象任意属性进⾏⽐较⼤⼩。
2. 在排序时候可以通过指定属性⽐较器实现任意属性排序。
3. 在排序时候Comparable接⼝⽤于进⾏⾃然排序,⽽Comparator接⼝进⾏⾃定义排序,⾃定义排序更加灵活⽅便⽽常⽤。
4. 设计上Comparable不推荐使⽤,因为对程序本⾝具有侵⼊性。
6. 简述HashMap的⼯作原理?tomcat启动闪退
1. HashMap是⾯向查询优化的数据结构,查询性能优异。
2. 在其内部利⽤数组存储数据。
3. 插⼊数据时,先根据Key的HashCode计算出数组的下标位置,再利⽤Key的equals()⽅法检查是否以存在重复的Key,如果不重复直
接存储到数组中,如果重复就作为链表存储到散列桶中。
4. 插⼊的数据和数组容量的⽐值⼤于加载因⼦则进⾏数组扩容,并重新散列,默认的加载因⼦为“0.75”。
5. 查询时,先根据Key的HashCode计算出数组的下标位置,再利⽤Key的equals()⽅法检查到Key的位置,如果到返回Key对应的
Value,否则返回Null。
6. 由于利⽤Key的HashCode直接计算出数据的存储位置,由于直接确定数据的存储位置,相对于其他查⽅式,查询效率⾮常⾼。
7. Iterator 怎么使⽤?有什么特点?
1. Iterator 接⼝提供遍历任何 Collection 的接⼝。我们可以从⼀个 Collection 中使⽤迭代器⽅法来获取迭代器实例。迭代器取代了
Java 集合框架中的 Enumeration,迭代器允许调⽤者在迭代过程中移除元素。
2. Iterator 使⽤代码如下:
List<String> list =new ArrayList<>();airpodspro2更新固件
Iterator<String> it = list.iterator();
while(it.hasNext()){
String obj = it.next();
System. out.println(obj);
}
3. Iterator 的特点是更加安全,因为它可以确保,在当前遍历的集合元素被更改的时候,就会抛出
ConcurrentModificationException 异常。
8. ArrayList 和 Vector 的区别是什么?
1. 线程安全:Vector 使⽤了 Synchronized 来实现线程同步,是线程安全的,⽽ ArrayList 是⾮线程安全的。
2. 性能:ArrayList 在性能⽅⾯要优于 Vector。
distinction谐音记忆3. 扩容:ArrayList 和 Vector 都会根据实际的需要动态的调整容量,只不过在 Vector 扩容每次会增加 1 倍,⽽ ArrayList 只会增加
50%。
9. Collection 和 Collections 有什么区别?
1. Collection 是⼀个集合接⼝,它提供了对集合对象进⾏基本操作的通⽤接⼝⽅法,所有集合都是它的⼦类,⽐如 List、Set 等。
2. Collections 是⼀个包装类,包含了很多静态⽅法,不能被实例化,就像⼀个⼯具类,⽐如提供的排序⽅法: Collections.
sort(list)。
10. HashMap 的实现原理?
1. HashMap 基于 Hash 算法实现的,我们通过 put(key,value)存储,get(key)来获取。
2. 当传⼊ key 时,HashMap 会根据 key. hashCode() 计算出 hash 值,根据 hash 值将 value 保存在 bucket ⾥。
3. 当计算出的 hash 值相同时,我们称之为 hash 冲突,HashMap 的做法是⽤链表和红⿊树存储相同 hash 值的 value。
4. 当 hash 冲突的个数⽐较少时,使⽤链表否则使⽤红⿊树。
5. HashMap 对应的线程安全类是 ConcurrentHashMap

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。