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的集成与操作架构,才能了解何时该采 ...
随机推荐
- [Luogu P3119] [USACO15JAN]草鉴定Grass Cownoisseur (缩点+图上DP)
题面 传送门:https://www.luogu.org/problemnew/show/P3119 Solution 这题显然要先把缩点做了. 然后我们就可以考虑如何处理走反向边的问题. 像我这样的 ...
- git/SQL/正则表达式的在线练习网站
虽说我没事就喜欢喷应试教育,但我也从应试教育中发现了一个窍门:如果能够以刷题的形式学习某项技能,效率和效果是最佳的.对于技术的学习,我经常面临的困境是,理论知识知道的不少,但是有的场景实在无法模拟,缺 ...
- streamreader
using (StreamReader sr = new StreamReader(@"C:\Documents and Settings\Administrator\桌面\1.txt&qu ...
- 双重河内塔I
双重河内塔问题 又称:双重汉诺塔问题 这是<具体数学:计算机科学基础(第2版)>中的一道课后习题 这道题也是挺有意义的,我打算写三篇随笔来讲这个问题 双重河内塔包含 2n 个圆盘,它们有 ...
- 像用excel一样用pandas
1 说明 预计需要15min阅读此教材: 本教材仅讲述如何查看excel数据,筛选,排序,查找替换数据,不涉及excel中复杂的图形绘制及样式修改. 2 假设 假设,已经存在一个test.xlsx文件 ...
- 企业中真实需要的集中管理软件SVN即Subversion版本控制
一.SVN基本概念 SVN是Subversion的简称,是一个自由开源的版本控制系统. checkout: 把整个项目源码下载到本地 update: 从服务器上更新代码,使本地达到最新版本 commi ...
- Core WebApi项目快速入门(二):Filter详解
Core的核心是DI,面向AOP的编程方式.在.NetCore中AOP的实现很大程度上依赖于Filter.下面就Core WebApi中的Filter进行举例. 其中鉴权中心我个人认为是比较重要的概念 ...
- Windows平台Python Pyramid实战从入门到进阶:第一个服务
Pyramid是比较流行的Python Web 框架,比较灵活,功能也很强大.最近项目上用到,便打算学习一下.网上教程比较少,而且很多都是针对linux平台的,我是windows土著所以对那些linu ...
- VC6最基本
高级语言C++程序设计[chap4][p119-1][我的自考书-刘璟周玉龙书] 1.VC6使用: <1>.编译:"Build"-->"Compile& ...
- Python的ConfigParser模块读取ini配置文件 报错(持续更新总结)
1.ConfigParser.MissingSection什么的错误巴拉巴拉一堆,其实根本上就是没有读到配置文件,然后我去检查了一遍路径,发现没有问题,我是将文件的路径作为一个字符串拼接好传到另一个专 ...