02Java面试题之容器

Java基础之容器

18.java 容器都有哪些?

​ 两类:

img

19.Collection 和 Collections 有什么区别?

Collection 是set和list集合的接口,内部提供了很多统一的方法。

Collections是一个包装类或者说工具类,提供了操作排序、搜索、安全等静态方法,用于处理线性表的

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

​ List允许有重复的元素,

​ set:元素不允许重复,HashSet是无须的的(hashcode算法),LinkedHashSet是有序的

​ Map:字典,键值对,HashMap无须的,LinkedHashSet有序的

21.HashMap 和 Hashtable 有什么区别?

​ Hashtable是线程安全的,不允许储存null值(key、value都不可以),HashTable使用Enumeration遍历,HashMap使用Iterator进行遍历。

​ 初始化和扩容方式不同:Hashtable默认的初始大小为11,之后每次扩充,容量变为原来的2n+1。HashMap默认的初始化大小为16。之后每次扩充,容量变为原来的2倍。

​ 创建时,如果给定了容量初始值,那么Hashtable会直接使用你给定的大小,而HashMap会将其扩充为2的幂次方大小。也就是说Hashtable会尽量使用素数、奇数。而HashMap则总是使用2的幂作为哈希表的大小。

22.如何决定使用 HashMap 还是 TreeMap?

​ HashMap,按照Hash来排序, TreeMap有序,根据键对其中的元素进行升序排序

23.说一下 HashMap 的实现原理?

HashMap 基于 Hash 算法实现,通过 put(key,value) 存储,get(key) 来获取 value
当传入 key 时,HashMap 会根据 key,调用 hash(Object key) 方法,计算出 hash 值,根据 hash 值将 value 保存在 Node 对象里,Node 对象保存在数组里
当计算出的 hash 值相同时,称之为 hash 冲突,HashMap 的做法是用链表和红黑树存储相同 hash 值的 value
当 hash 冲突的个数:小于等于 8 使用链表;大于 8 时,使用红黑树解决链表查询慢的问题

24.说一下 HashSet 的实现原理?

HashSet是基于HashMap 实现的,HashSet 底层使用HashMap来保存所
有元素,因此HashSet的实现比较简单, 相关HashSet 的操作, 基本上都是
直接调用底层HashMap的相关方法来完成, HashSet不允许重复的值。

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

​ ArrayList:本质是动态数组,需要连续的内存空间

​ 优点:查询速度快,末尾插入快

​ 缺点:除了末尾插入快以外,其他地方都慢,原因,内存需要重新移动,需要连续的内存空间,数据多时,造成内存压力。

​ LinkedList :双向链表,不需要连续的空间

​ 优点:增删快

​ 缺点:查询慢,时间复杂度n/2,大o法,O(n)

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

​ asList : 数组转List

​ toArray:List转数组

27.ArrayList 和 Vector 的区别是什么?

​ ArrayList:非线程安全,效率高,扩容一般是1.5倍

​ Vector:线程安全,效率低,项目一般不适用, 扩容是2倍。就算要枷锁,也可以自行使用加锁的方式。

28.Array 和 ArrayList 有何区别?

​ Array:数组,一开始就确定了大小,

​ ArrayList:内部还是数组,但是随着数据的变换,可以动态去扩容,其实本质就是创建新的数组,将原来的数据复制进来(C++中vector这样做的)

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

​ offer()和add()的区别:add()和offer()都是向队列中添加一个元素。但是如果想在一个满的队列中加入一个新元素,调用 add() 方法就会抛出一个 unchecked 异常,而调用 offer() 方法会返回 false。可以据此在程序中进行有效的判断!

​ peek()和element()的区别:peek()和element()都将在不移除的情况下返回队头,但是peek()方法在队列为空时返回null,调用element()方法会抛出NoSuchElementException异常。

​ poll()和remove()的区别:poll()和remove()都将移除并且返回对头,但是在poll()在队列为空时返回null,而remove()会抛出NoSuchElementException异常

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

​ vector

​ statck

​ hashtable

​ enumeration:枚举

31.迭代器 Iterator 是什么?

用于顺序访问集合对象的元素,个人理解相当于指针。

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

从头开始到结束,next下一个元素,hasNext判断是否有下一个元素,等价于C++ != end

33.Iterator 和 ListIterator 有什么区别?

​ Iterator :应用于所有的集合,Set、List和Map和这些集合的子类型,从头到尾。

​ ListIterator :可以逆向遍历,hasPrevious()和previous()方法,但是只针对于list集合

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

​ 1.我们可以采用Collections包下的unmodifiableMap方法,通过这个方法返回的map,是不可以修改的。他会报 java.lang.UnsupportedOperationException错。

​ 2.Collections.unmodifiableSet() 保证set集合不被修改

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值