关于java:Java面试专题集合篇2

46次阅读

共计 1862 个字符,预计需要花费 5 分钟才能阅读完成。

开篇介绍

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

正文完
 0