Java集合框架 面试问题整理
简介
java集合类是java.util 包中的重要内容。java集合框架包含了大量集合接口以及这些接口的实现类和操作他们的算法。
java集合框架图
主要提供的数据结构
- List
又称有序的Collection。它按照对象的进入顺序保存对象,可以对列表中的每个元素的出入和删除元素位置进行精确的控制。同时,它可以保存重复的对象。
LinkedList、ArrayList、Vector都实现了List接口。
- Set
Set 是数学意义上的集合。集合中元素不可重复。因此存入set的每个元素都必须通过equals()方法来确定对象的唯一性。
Set 接口有两实现类,HashSet和TreeSet其中TreeSet 实现了SrotedSet接口所以TreeSet是有序的。
- Map
Map 提供一个从键映射到值得数据结构。它用于保存键值对,其中值可以重复,但是键一定唯一,不能重复。Java类库中有多个实现该接口的类:HashMap、LinkedHashMap、TreeMap、WeakHashMap、IdentityHashMap。
Collection和Collections有什么区别
- Collection是一个集合的接口。它提供了对集合对象进行基本操作的通用接口方法。实现该类的主要方法有List和Set。
- Collections是针对集合类的一个包装类,它提供一系列的静态方法以实现对各种集合的搜索、排序、线程安全化等操作。(其中大多数方法都是用来处理线性表)
List
ArrayList,LinkedList和Vector的区别
- ArrayList和Vector都是由Object[]实现的,LinkedList是由双向链表实现的。
- Vector是线程安全的,Vector中绝大多数的方法都是直接或者间接同步的。
- ArrayList每次扩容1.5倍,Vector每次扩容2倍。
Map
HashMap添加的过程
- 调用Key的hashCode()方法生成一个hash值h1。
- 如果这个h1在HashMap中不存在,那么直接将<key,value>添加到HashMap中。
- 如果这个h1已经存在了那么找出HashMap中所有Hash值为h1的key。
- 分别调用equals()方法判断当前添加的key是否与已经存在的key值相同
如果相同,说明当前的Key已经存在。HashMap会使用新的value覆盖原有的value。
如果没有相同,说明当前的Key不存在。HashMap会创建新的映射关系。
- Hash冲突的解决。(当新增的key的Hash值在HashMap中存在时,就会产生冲突。一般有开放地址法、再Hash法、链地址法等解决Hash冲突问题。
HashMap使用的是链地址法来解决冲突的
HashMap的查找过程
- 调用hashCode()方法获取Key的Hash值h,确定键为Key的所有值存储的首地址。
- 如果Key的值有多个,程序会遍历所有结果,并通过调用key的equals()方法来判断key的内容是否相等。只有当equals()方法的返回值为true时,对应的value才是正确值。
HashMap和HashTable的区别
继承的父类不同:HashTable继承自Dictionary类,而HashMap继承自Abstract Map类但是都两者实现了Map接口
线程安全性不同:HashTable 的方法是线程安全的,其中的每个方法都加入了Synchronized同步。
提供的方法不同:HashMap和HashTable相似度很高,但是也有区别,在HashMap中将contain方法去掉了,改成了containsValue和containsKey。(contains容易造成误解)
key和value是否可以为空值(null):在HashMap中允许且只允许一个key值为null,允许多个value值为null。HashTable中Key和value都不允许为null。
遍历方式实现不同:HashTable和HashMap都是用了迭代器Iterator [1]。
HashTable中还使用了Enumeration方式。Hash值不同:HashTable直接将对象的HashCode作为Hash值。HashMap则重新计算key的Hash值。
数组的初始化不同:HashTable默认为11,扩容为(old*2+1),HashMap 默认为16,扩容为(old*2)
WeakHashMap 和 HashMap 的异同
- WeakHashMap 和 HashMap类似。二者不同的地方在于WeakHashMap中的Key采用的是“弱引用”的方式,只要WeakHashMap中的Key不再被外部引用。它就可以被垃圾回收器回收。
- 而HashMap采用的是“强引用”的方式。当HashMap中的Key没有被外部引用时,只有在这key从HashMap中被删除之后,才可以被垃圾回收器回收。
HashMap、LinkedHashMap和TreeMap的异同
- HashMap里面存入的键值对在取出时没有固定的顺序,是随机的。
- TreeMap实现了SortMap的接口,能够把保存的记录根据键排序。因此取出来的是排序好的键值对。
- LinkedHashMap 是HashMap的一个子类,如果需要输入和输出顺序相同则使用LinkedHashMap可以实现。(LinkedHashMap还可以按照读取顺序排序)
HashMap 上下文中,同步指的是什么?
同步意味着,在同一时刻中只有一个线程可以修改Hash表,任何线程在执行HashTable的更新操作前都要获取对象锁,其他线程则等待线程锁的释放。
如何实现HashMap的同步?
HashMap以使用
Map m = Collections.synchronizedMap(new HashMap());
来达到同步的效果。
Iterator是一个对象,它的工作是遍历并选择序列中的对象,它提供了一种访问访问一个容器对象中的各个元素。而又不必暴露该对象内部细节的方法。 ↩︎
Java集合框架 面试问题整理的更多相关文章
- java集合框架面试要点整理
- 【转】Java集合框架面试问题集锦
Java集合框架(例如基本的数据结构)里包含了最常见的Java常见面试问题.很好地理解集合框架,可以帮助你理解和利用Java的一些高级特性.下面是面试Java核心技术的一些很实用的问题. Q:最常见的 ...
- Java集合框架面试题目
1.为什么Map接口不继承Collection 接口? Set是无序集合,并且不允许重复的元素 List是有序的集合,并且允许重复的元素 而Map是键值对 它被视为是键的set和值的set的组合 Ma ...
- Java集合框架相关知识整理
1.常见的集合有哪些? Collection接口和Map接口是所有集合框架的父接口 Collection接口的子接口包括:Set接口和List接口 Map接口的实现类主要有:HashMap ...
- Java集合框架总结—超详细-适合面试
Java集合框架总结—超详细-适合面试 一.精简: A.概念汇总 1.Java的集合类主要由两个接口派生而出:Collection和Map,Collection和Map是Java集合框架的根接口, ...
- Java集合框架(不全,待继续整理)
技术在线学习网站: https://www.runoob.com/java/java-collections.html 从上面的集合框架图可以看到: 1.Java 集合框架主要包括两种类型的容器: 1 ...
- (转)Java集合框架:HashMap
来源:朱小厮 链接:http://blog.csdn.net/u013256816/article/details/50912762 Java集合框架概述 Java集合框架无论是在工作.学习.面试中都 ...
- Java集合框架:HashMap
转载: Java集合框架:HashMap Java集合框架概述 Java集合框架无论是在工作.学习.面试中都会经常涉及到,相信各位也并不陌生,其强大也不用多说,博主最近翻阅java集合框架的源码以 ...
- [转载]Java集合框架的常见面试题
http://www.jfox.info/40-ge-java-ji-he-lei-mian-shi-ti-he-da-an 整理自上面链接: Java集合框架为Java编程语言的基础,也是Java面 ...
随机推荐
- zabbix使用自动发现功能批量监控服务器端口的可用性
使用自动发现脚本批量监控服务器端口的可用性 .编写自动发现脚本 # cat /usr/local/zabbix_agents_3.2.0/scripts/web_site_code_status.sh ...
- 【mybatis】子查询
networkResource的 resultMap <resultMap id="NetworkResultMap" type="com.chinamobile. ...
- awk(gawk)文本报告生成器
awk是gawk的链接文件,是一种优良的文本处理工具,实现格式化文本输出,是Linux和Unix现有环境中功能最强大的数据处理引擎之一.这种编程及数据操作语言的最大功能取决于一个人拥有的知识量,使用& ...
- vue-cli3用图形化的方式创建项目
Vue脚手架可以快速生成Vue项目基础的架构. A.安装3.x版本的Vue脚手架: npm install -g @vue/cli B.基于3.x版本的脚手架创建Vue项目: 1).使用命令创建Vue ...
- C++17新特性optional和string_view
1. optional的作用 类模板 std::optional 管理一个可选的容纳值,即可以存在也可以不存在的值. 一种常见的 optional 使用情况是一个可能失败的函数的返回值.与其他手段,如 ...
- 和至少为K的最短子数组
返回 A 的最短的非空连续子数组的长度,该子数组的和至少为 K 如果没有和至少为 K 的非空子数组,返回 -1 . 示例 1: 输入:A = [1], K = 1 输出:1 示例 2: 输入:A = ...
- perl修改镜像源地址
perl修改源地址 这里推荐中科大的源 http://mirrors.ustc.edu.cn/CPAN/ perl -MCPAN -e shell 1.执行cpan命令确认存在该命令 如果cpan执行 ...
- LeetCode 406. 根据身高重建队列(Queue Reconstruction by Height) 46
406. 根据身高重建队列 406. Queue Reconstruction by Height 题目描述 假设有打乱顺序的一群人站成一个队列.每个人由一个整数对 (h, k) 表示,其中 h 是这 ...
- [转帖]Zookeeper
Zookeeper https://www.cnblogs.com/zhang-qc/p/8877082.html Zookeeper其实是一种为分布式应用所设计的高可用.高性能且一致的开源协调服 ...
- Shell编程学习(七)
if 条件语句的知识与实践 if 条件语句 if条件语句的语法 单分支结构 第一种 if <条件测试表达式> then 指令 fi 第二种 if <条件测试表达式>; then ...
