二、java容器篇面试题

本文详细介绍了Java中的各种容器,包括集合(如Set、List、Map)、HashMap与Hashtable的区别,以及何时选择TreeMap。还涵盖了ArrayList、LinkedList、Array与List的对比,以及线程安全性和迭代器的使用。
摘要由CSDN通过智能技术生成

二、容器

1.java 容器都有哪些?

set、hashset、linkedhashset、treeset、list、arraylist、linkedlist、vector、map、hashmap、linkedhashmap、hashtab、treemap

参考文章

2.Collection 和 Collections 有什么区别

collection是集合的最顶层,包含了集合体系和共性

Collections 是工具类,用于操作collection
参考1

参考2

3.List、Set、Map 之间的区别是什么?

list 有序集合

set 不可重复集合

map 键值对映射;key唯一,不允许重复;value允许重复,允许null情况

参考

4.HashMap 和 Hashtable 有什么区别?

  • hashmap是非同步;hashtable是同步的,所有的读写操作都进行了锁保护;单线程情况下,hashmap的效率更好;

  • hashmap允许键值为null,hashtable不允许

  • hashmap的迭代器是fail-fast,而hashmap不同

参考

5.如何决定使用 HashMap 还是 TreeMap

有排序要求,需要返回有序情况时的map使用TreeMap

参考

6.说一下 HashMap 的实现原理

链表+数组,hashmap的初始长度为16,即数组的长度为16,填充因子为0.75,当数组长度不满足时,扩容长度为当前的一倍

参考

7.说一下 HashSet 的实现原理

hashset中不允许有null值,hashset中add方法底层采用了hashmap的put,首先会判断key是否存在,如果存在则修改value,不存在则添加key-value;而在set方法中,因为不存在value,所以判断key如果存在不插入,不存在插入,这样hashset就不存在重复值

参考

8.ArrayList 和 LinkedList 的区别是什么?

结构实现:arraylist采用动态数组,linkedlist采用双向链表

随机访问效率:arraylist比linkedlist在随机访问效率上高,因为linkedlist是线性存储方式,所以需要移动指针从前往后依次查找

增加和删除效率:linkedlist在增加和删除效率比arraylist上高,因为arraylist采用动态数组,增加删除会影响其他数组的下标

在增加删除频繁的环境下使用linkedlist更好,在需要查询的情况下使用arraylist

参考

9.如何实现数组和 List 之间的转换

for循环

arrays.aslist

参考

10.ArrayList 和 Vector 的区别是什么

vector是同步的,线程安全,arraylist是异步的,线程不安全

vector的增长率是目前数组长度的100%,而arraylist增长率是目前长度的50%。如果在集合中使用数据量比较大的数据,用vector有一定优势

参考

11.Array 和 ArrayList 有何区别

array可以包含基本类型和对象类型,arraylist只能包含对象类型

array大小固定,arraylist大小是动态变化的

arraylist提供了更多方法和特性

参考

12.在 Queue 中 poll()和 remove()有什么区别

poll移除为空时返回null,remove移除为空时返回异常NoSuchElementException异常

参考和举一反三

13.哪些集合类是线程安全的?

hashtable,vector,stack,java.util.concurrent报下所有的集合类…

参考

14.迭代器 Iterator 是什么

迭代器可以遍历集合的对象,为各种容器提供了公共的操作接口,隔离对容器的遍历操作和底层实现(解耦)

缺点是增加新的集合类对应增加新的迭代器类,迭代器类和集合类成对增加。

迭代器是java中常用的设计模式之一,用于顺序访问集合对象的元素,无需知道集合对象的底层实现

迭代器通常被称为“轻量级”对象,因为创建它的代价小

参考

15.Iterator 怎么使用?有什么特点?

参考

16.Iterator 和 ListIterator 有什么区别?

参考

17.怎么确保一个集合不能被修改?

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值