开篇介绍

大家好,公众号【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准时推送技术文章,让你的下班路不在孤单,而且每月还有送书流动,助你晋升硬实力!