Java面试专题-集合篇(2)

开篇介绍
大家好,公众号【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)的更多相关文章
- 【JAVA秒会技术之秒杀面试官】秒杀Java面试官——集合篇(一)
[JAVA秒会技术之秒杀面试官]秒杀Java面试官——集合篇(一) [JAVA秒会技术之秒杀面试官]JavaEE常见面试题(三) http://blog.csdn.net/qq296398300/ar ...
- 【java面试】- 集合篇
Java 集合概览 从下图可以看出,在Java中除了以Map结尾的类之外, 其他类都实现了Collection接口.并且,以Map结尾的类都实现了Map接口 List.Set.Map三者的区别 Lis ...
- Java面试专题-基础篇(1)
- Java面试专题-多线程篇(2)- 锁和线程池
- Java面试之集合框架篇(3)
21.ArrayList和Vector的区别 这两个类都实现了List接口(List接口继承了Collection接口),他们都是有序集合,即存储在这两个集合中的元素的位置都是有顺序的,相当于一种动态 ...
- Java面试之框架篇(九)
spring现在无疑是Java中最火的框架,使用范围广,几乎每个公司面试都会涉及spring和数据库,你可以对Struts不熟悉,但一定不能表现出对spring不了解.第九篇赢在面试全篇介绍sprin ...
- Java面试之框架篇(9)
spring现在无疑是Java中最火的框架,使用范围广,几乎每个公司面试都会涉及spring和数据库,你可以对Struts不熟悉,但一定不能表现出对spring不了解.第九篇赢在面试全篇介绍sprin ...
- JAVA基础整理-集合篇(一)
集合作为JAVA的基础知识,本来感觉自己理解的很清楚了,但是在最近的一次面试中还是答得不尽如人意!再次做一下整理,以便加深理解以及随时查阅. 首先,java.util包中三个重要的接口及特点:List ...
- 开发高性能JAVA应用程序基础(集合篇)
集合类在开发中使用非常频繁,使用时合理的选择对提高性能小有帮助.而且大部分面试都会有与集合相关的问题,例如ArrayList和LinkedList的对比. 了解API的集成与操作架构,才能了解何时该采 ...
随机推荐
- 题解 P1541 【乌龟棋】
题目描述 乌龟棋的棋盘是一行\(N\)个格子,每个格子上一个分数(非负整数).棋盘第\(1\)格是唯一的起点,第\(N\)格是终点,游戏要求玩家控制一个乌龟棋子从起点出发走到终点. 乌龟棋中\(M\) ...
- 力扣 - 445. 两数相加 II
目录 题目 思路 代码实现 题目 给你两个 非空 链表来代表两个非负整数.数字最高位位于链表开始位置.它们的每个节点只存储一位数字.将这两数相加会返回一个新的链表. 你可以假设除了数字 0 之外,这两 ...
- UOJ Round总结
#22. [UR #1]外星人 一开始随便搞出第一问答案,很显然的性质对$x$有变化的$a$一定是递减的,就拿一个桶直接记录可以达到的值 然后我开始想第二问,一开始想直接在这个桶上统计答案,然后发现不 ...
- Java_流相关
java.io包中重要的5个类3个接口 类名 说明 File 文件类 InputStream 字节流输入 OutputStream 字节流输出 Reader 字符输入流 Writer 字符输出流 Cl ...
- linux磁盘已满,查看那个目录文件最占磁盘空间并解决没有内存不耗费资源删除
df -Th查看磁盘空间占用情况 [root@IntelRC-Nginx-N023 ~]# df -Th Filesystem Type Size Used Avail Use% Mounted on ...
- Python正则表达式-换行的匹配
找到了之前参考的博文,用来记录一下https://www.cnblogs.com/baxianhua/p/8572805.html 平常 点 (.)去匹配任意字符的时候,是不能匹配换行符的 匹配换行: ...
- efcore 学习
新开一个博客来写一下ef core的学习过程 这个博客内容会跟着官网走 具体可见官网https://docs.microsoft.com/zh-cn/ef/core/get-started/?tabs ...
- php 上传音频文件并获取时长
<input type="file" name="audio" id="voice_file" style="display ...
- 深入探讨HBASE
HBASE基础 1. HBase简介HBase是一个高可靠.高性能.面向列的,主要用于海量结构化和半结构化数据存储的分布式key-value存储系统. 它基于Google Bigtable开源实现,但 ...
- 异常记录-Gradle依赖掉坑之旅
前言 最近在项目中遇到了一个问题,死活拉不下来依赖,耗费了一整天,感觉自己真是菜的抠脚. 没想到今天脑子一清醒,刷刷的问题逐个击破了. 问题描述: 项目成员添加了新的依赖,然后我这边项目拉下来,bui ...