JAVA面试常见问题之常见集合篇
1、List 和 Set 区别
- List
- 可以允许重复的对象。
- 可以插入多个null元素。
- 有序容器
- Set
- 不允许重复的对象。
- 只能插入1个null元素
- 无序容器,可以使用TreeSet实现有序
2、Set和hashCode以及equals方法的联系
set集合中存放的数据有一个特点,那就是无序且不重复。无序是因为set集合中的元素没有下坐标。不重复的原因就是因为set集合中有hashcode与equals这两个方法。
3、List 和 Map 区别
- 结构:List为单列结构,Map为双列结构
- 重复性:List为可以重复,Map为双列集合(key-value),key不可以重复
- 有序性:List为有序集合,Map的key是无序的
4、Arraylist 与 LinkedList 区别
- 数据结构:ArrayList基于动态数组的数据结构。LinkedList基于链表的数据结构。
- 操作性:ArrayList查询快,增删慢,LinkedList查询慢,增删快。
5、ArrayList 与 Vector 区别
- 同步性:Vector线程安全,用synchronized实现线程安全。ArrayList线程不安全。
- 数据容量增长:二者都有一个初始容量大小,采用线性连续存储空间,当存储的元素的个数超过了容量时,就需要增加二者的存储空间,Vector增长原来的一倍,ArrayList增加原来的0.5倍。
6、HashMap 和 Hashtable 的区别
- 继承不同父类:Hashtable继承自Dictionary类,而HashMap继承自AbstractMap类。但二者都实现了Map接口。
- 线程安全:Hashtable线程安全,HashMap线程不安全。
- 是否提供contains方法: HashMap把Hashtable的contains方法去掉了,改成containsValue和containsKey。Hashtable则保留了contains,containsValue和containsKey三个方法,其中contains和containsValue功能相同。
- key和value的是否可以为null值:Hashtable中,key和value都不允许出现null值。HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。
7、HashSet 和 HashMap 区别
*HashMap* | *HashSet* |
HashMap实现了Map接口 | HashSet实现了Set接口 |
HashMap储存键值对 | HashSet仅仅存储对象 |
使用put()方法将元素放入map中 | 使用add()方法将元素放入set中 |
HashMap中使用键对象来计算hashcode值 | HashSet使用成员对象来计算hashcode值,对于两个对象来说hashcode可能相同,所以equals()方法用来判断对象的相等性,如果两个对象不同的话,那么返回false |
HashMap比较快,因为是使用唯一的键来获取对象 | HashSet较HashMap来说比较慢 |
8、HashMap 和 ConcurrentHashMap 的区别
- 线程安全性:HashMap线程不安全,ConcurrentHashMap线程安全
- ConcurrentHashMap特性:性能与安全性兼得。加入分段锁的概念,相当于一个大集合,根据hashcode值分成多个hashtable,根据key.hashCode()来决定把key放到哪个HashTable中。
9、HashMap 的工作原理及代码实现,什么时候用到红黑树
- 工作原理:通过hash的方法,通过put和get存储和获取对象。存储对象时,我们将K/V传给put方法时,它调用hashCode计算hash从而得到bucket位置,进一步存储,HashMap会根据当前bucket的占用情况(当键值对的数量大于容量(capacity)*负载因子(load factor 默认值0.75)时)自动调整容量(超过Load Facotr则resize为原来的2倍)。获 取对象时,我们将K传给get,它调用hashCode计算hash从而得到bucket位置,并进一步调用equals()方法确定键值对。如果发生碰撞的时候,Hashmap通过链表将产生碰撞冲突的元素组织起来,在Java 8中,如果一个bucket中碰撞冲突的元素超过某个限制(默认是8),则使用红黑树来替换链表,从而提高速度。
- 代码实现:参考 http://www.cnblogs.com/mzc-blogs/p/5800084.html, 也可以直接查看源码
- 什么时候用到红黑树:当链表(bucket)的数量大于8时,后面的使用红黑树。使用红黑树增加检索的速度。
10、多线程情况下HashMap死循环的问题
- 原因:HashMap是采用链表解决Hash冲突,因为是链表结构,那么就很容易形成闭合的链路(原因:多线程操作时,可能会有两个或以上的线程同时触发rehash--重新计算hash值--操作,容易造成闭合的链路),这样在循环的时候只要有线程对这个HashMap进行get操作就会产生死循环。
- 解决思路:用ConcurrentMap代替HashMap
11、HashMap出现Hash DOS攻击的问题
- 原因:
12、ConcurrentHashMap 的工作原理及代码实现,如何统计所有的元素个数
- ConcurrentHashMap工作原理:容器中有多把锁,每一把锁锁一段数据,这样在多线程访问时不同段的数据时,就不会存在锁竞争了,这样便可以有效地提高并发效率。这就是ConcurrentHashMap所采用的"分段锁"思想。
- 代码实现:参考https://www.cnblogs.com/chengxiao/p/6842045.html 或查看源码
- 如何统计所有的元素个数:size()
13、手写简单的HashMap
参考: https://blog.csdn.net/lishaoran369/article/details/61920036
JAVA面试常见问题之常见集合篇的更多相关文章
- JAVA面试常见问题之锁机制篇
1.说说线程安全问题,什么是线程安全,如何保证线程安全 线程安全:就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用.不 ...
- Java 面试知识点解析(六)——数据库篇
前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...
- Java 面试知识点解析(七)——Web篇
前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...
- Java 面试知识点解析(三)——JVM篇
前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...
- Java面试必刷常见真题200+ ,让你“过五关,斩六将”,轻松入大厂
这份面试清单是我从 2015 年做 TeamLeader 之后开始收集的,一方面是给公司招聘用,另一方面是想用它来挖掘我在 Java 技术栈中的技术盲点,然后修复和完善它,以此来提高自己的技术水平.虽 ...
- JAVA面试常见问题之基础篇
一. 面向对象的特征:继承.封装.(抽象).多态 继承:继承是子类自动共享父类数据和方法的机制,这是类之间的一种关系,提高了软件的可重用性和可扩展性. 封装:封装是保证软件部件具有优良的模块性的基础 ...
- JAVA面试常见问题之设计模式篇
1.常见的设计模式 单例模式.工厂模式.建造模式.观察者模式.适配器模式.代理模式.装饰模式. 参考:https://www.cnblogs.com/cr330326/p/5627658.html 2 ...
- JAVA面试常见问题之进程和线程篇
1.线程和进程的概念.并行和并发的概念 进程:计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本 ...
- JAVA面试常见问题之Redis篇
Redis为单线程 1.Redis 有哪些数据类型 String 哈希 list set 有序set 2.Redis 内部结构 参考:https://www.cnblogs.com/chenpingz ...
随机推荐
- MapReduce模型简介
- UBOOT命令简写说明
所以命令都可以简写,只要命令前面的一部分不会跟其它命令相同,就可以不用写全整个命令. save 命令 CRANE2410 # sa Saving Environment to Flash... Un- ...
- Expression表达式 实现and、or搜索
用法: [HttpPost] public ActionResult GetBannerList(int pageIndex, int pageSize, string search) { Resul ...
- 人脸识别的LOSS(上)
超多分类的Softmax 2014年CVPR两篇超多分类的人脸识别论文:DeepFace和DeepID Taigman Y, Yang M, Ranzato M A, et al. Deepface: ...
- [转]Entity Framework 的实体关系
通过 Entiy Framework实践系列 文章,理了理 Entity Framework 的实体关系. 为什么要写文章来理清这些关系?“血”的教训啊,刚开始使用 Entity Framework ...
- 下面分享一下RHEL/CentOS7 安装图形化桌面详细图解
Linux是一个多任务的多用户的操作系统,好多linux爱好者在安装完linux后经常遇到一个问题——没有图形化桌面(http://www.xcmnyy.com)今天小编在安装RHEL7的时候,一步留 ...
- 创建vue项目及引入插件
部署开发环境 安装淘宝镜像 npm install -g cnpm --registry=https://registry.npm.taobao.org 安装webpack cnpm install ...
- js 移动端点击复制字符串
function copyStr(val) { //val 是要复制的字符串 var input = document.createElement("input"); input. ...
- 安装Tengine和Tengine说明
什么是Tengine 官方帮助文档:http://tengine.taobao.org/nginx_docs/cn/ Tengine的安装 新建tengine用户组 groupadd -r n ...
- 杂项-公司:IBM
ylbtech-杂项-公司:IBM IBM (IT公司-国际商业机器公司) IBM(国际商业机器公司)或万国商业机器公司,简称IBM(International Business Machines C ...