开篇介绍

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

Java面试专题-集合篇(2)的更多相关文章

  1. 【JAVA秒会技术之秒杀面试官】秒杀Java面试官——集合篇(一)

    [JAVA秒会技术之秒杀面试官]秒杀Java面试官——集合篇(一) [JAVA秒会技术之秒杀面试官]JavaEE常见面试题(三) http://blog.csdn.net/qq296398300/ar ...

  2. 【java面试】- 集合篇

    Java 集合概览 从下图可以看出,在Java中除了以Map结尾的类之外, 其他类都实现了Collection接口.并且,以Map结尾的类都实现了Map接口 List.Set.Map三者的区别 Lis ...

  3. Java面试专题-基础篇(1)

  4. Java面试专题-多线程篇(2)- 锁和线程池

  5. Java面试之集合框架篇(3)

    21.ArrayList和Vector的区别 这两个类都实现了List接口(List接口继承了Collection接口),他们都是有序集合,即存储在这两个集合中的元素的位置都是有顺序的,相当于一种动态 ...

  6. Java面试之框架篇(九)

    spring现在无疑是Java中最火的框架,使用范围广,几乎每个公司面试都会涉及spring和数据库,你可以对Struts不熟悉,但一定不能表现出对spring不了解.第九篇赢在面试全篇介绍sprin ...

  7. Java面试之框架篇(9)

    spring现在无疑是Java中最火的框架,使用范围广,几乎每个公司面试都会涉及spring和数据库,你可以对Struts不熟悉,但一定不能表现出对spring不了解.第九篇赢在面试全篇介绍sprin ...

  8. JAVA基础整理-集合篇(一)

    集合作为JAVA的基础知识,本来感觉自己理解的很清楚了,但是在最近的一次面试中还是答得不尽如人意!再次做一下整理,以便加深理解以及随时查阅. 首先,java.util包中三个重要的接口及特点:List ...

  9. 开发高性能JAVA应用程序基础(集合篇)

    集合类在开发中使用非常频繁,使用时合理的选择对提高性能小有帮助.而且大部分面试都会有与集合相关的问题,例如ArrayList和LinkedList的对比. 了解API的集成与操作架构,才能了解何时该采 ...

随机推荐

  1. python使用redis缓存数据库

    Redis 关注公众号"轻松学编程"了解更多. Windows下直接解压可用,链接:https://pan.baidu.com/s/1rD4ujoN7h96TtHSu3sN_hA ...

  2. [Luogu P2827] 蚯蚓 (巧妙的模拟)

    题面: 传送门:https://www.luogu.org/problemnew/show/P2827 Solution 看到这题,我们肯定会有一个大胆想法. 那就是直接用堆模拟这个过程. 对于q,我 ...

  3. Mybatis执行SQL的完整过程及四大组件介绍

    一切的执行从MapperProxy开始,MapperProxy是MapperProxyFactory使用SqlSession创建出来的.所以MapperProxy中包含SqlSession. 可以看到 ...

  4. 838. Push Dominoes —— weekly contest 85

    Push Dominoes There are N dominoes in a line, and we place each domino vertically upright. In the be ...

  5. SQLServer连接cache数据库

    开始文章之前首先要了解一下什么是Caché数据库. Caché数据库是美国Intersystems公司产品,后关系型数据库(Post Relational database)中的领头羊.Caché数据 ...

  6. 极客mysql08

    1.innodb支持RC和RR隔离级别实现是用的一致性视图(consistent read view) 2.事务在启动时会拍一个快照,这个快照是基于整个库的. 基于整个库的意思就是说一个事务内,整个库 ...

  7. gcc入门(上)

    gcc:GNU Compiler Collection的缩写.最初是作为C语言的编译器,现在已支持多种语言.Gcc支持多种硬件平台.gcc是一个可移植跨平台编译器gcc还能跨平台交叉编译器.gcc有多 ...

  8. JS控制Video播放器(快进、后退、播放、暂停、音量大小)

    思路: 一.首先监听触发事件. 比如:向上键对应的keyCode为38,向下键对应的keyCode为40,向左键对应的keyCode为37,向右键对应的keyCode为39,空格键对应的keyCode ...

  9. python爬虫 selenium 抓取 今日头条(ajax异步加载)

    from selenium import webdriver from lxml import etree from pyquery import PyQuery as pq import time ...

  10. Environment Cubemap

    要创建一个Cubemap(将您的环境捕获到一个Cubemap中),您需要去Unity Documentation复制RenderCubemapWizard.cs脚本! 然后在"Project ...