Java极客思维

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

 

开篇介绍

大家好,公众号【Java极客思维】近期会整理一些Java高频面试题分享给小伙伴,也希望看到的小伙伴在找工作过程中能够用得到!本章节主要针对Java一些集合高频面试题进行分享。

 

Q:

集合的体系有哪些?

单列集合:

双列集合:

 

Q1:

Collection 和 Collections 异同区别是什么?

Collection:

java.util包下的接口,它是各类集合的父接口,继承它的接口主要有Set 和 List;

 

Collections:

java.util包下的类,是针对集合的工具类,提供一系列静态方法和对各种集合的搜索,排序,线程安全化等操作。

 

 

Q2:

ArrayList 和 Vector如何扩容?

ArrayList 和 Vector都有一个初始容量大小。
1. ArrayList是一个大小可改变的数组,当往ArrayList中添加更多的元素时,其大小会动态地增长。

内部元素可以直接通过get和set方法进行访问,因为ArrayList本质上就是一个数组。

2. Vector和ArrayList添加更多元素时都会请求更大的空间。

3. Vector每次请求其大小的双倍空间,ArrayList的size每次增长50%。

(Vector默认增加原来的一倍,ArrayList默认增加原来的0.5倍)

 

 

Q3:

List和Set的区别是什么?

 

相同点:List 和 Set都继承Collection接口。都是用来存储一组相同类型的元素的集合。

区别:

List特点:元素有序放入,元素可以重复。

即有顺序的存储,先存入的对象排在集合前面。因此可以通过下标来取的集合内的元素。

 

Set特点:元素无序放入,元素不可重复。

即无顺序的存储,先存入的对象不一定排在集合前面。且不可以重复,相同元素在Set集合中只会存在一份。因为上一篇文章解释了HashSet实现了HashCode的案例。所以,在一些场景下,可以用Set来去重。

 

 

Q4:

Set集合是如何保证元素不重复的?

Java的Set集合体系中,实现Set的方式主要分为两大类:HashSet 和 TreeSet

其中:

1. HashSet是基于哈希表实现的,HashSet中数据是无序存放的,可以放入null值,但是有且只能放一个null,值都不可以重复,类似数据库中的唯一约束。

2. TreeSet是二叉树实现的,TreeSet中的数据是自动排序好的,不允许存放null值。

 

在HashSet中,基本的操作都是由HashMap底层实现的,因为HashSet底层使用HashMap存储数据的(key-value)。当HashSet中添加对象时,首先计算对象的hashCode值,然后通过扰动计算和按位与的方式计算出这个元素的存储位置,如果这个位置为空,表示还没有对应的内容,就将对象添加进去;如果不为空,则会用equals方法来比较对象是否相等,相等则不会添加,不相等则找一个空位添加。

 

TreeSet底层是TreeMap的keySet()方法,而TreeMap是基于红黑树实现的,红黑树是一种平衡二叉查找树,它能保证任何一个节点的左右 子树的高度差不会超过较矮的那一棵的一倍。

 

TreeMap是按key排序的,元素在插入TreeSet时compareTo()方法会被调用,所以TreeSet中的元素要实现Comparable接口。TreeSet作为一种Set,它不允许出现重复元素。TreeSet使用compareTo()方法来判断重复元素的。

 

 

Q5:

HashMap 和 HashTable有什么区别?

 

1. HashMap允许键和值是null。而HashTable不允许键或值是null。

2. HashTable是线程同步的,而HashMap不是线程同步的。所以,HashTable适合在多线程环境中使用,而HashMap更适合于单线程的环境中使用。

3. HashMap提供了可供应用迭代的键的集合;因此,HashMap是快速失败的。另一方面,HashTable提供了对键对的列举(Enumeration)。

4. 由于HashTable继承Dictionary类,但是这个类基本已经废弃了,所以一般认为HashTable是一个遗留的类,在项目中不怎么使用。

 


点关注、不迷路

如果觉得文章不错,欢迎关注点赞收藏,你们的支持是我创作的动力,感谢大家。

如果文章写的有问题,请不要吝啬,欢迎留言指出,我会及时核查修改。

如果你还想更加深入的了解我,可以微信搜索「Java极客思维」进行关注。每天8:00准时推送技术文章,让你的上班路不在孤独,而且每月还有送书活动,助你提升硬实力!

posted on 2020-12-03 22:01  Java极客思维  阅读(87)  评论(0编辑  收藏  举报