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面 ...
随机推荐
- 【小实现】css after+border实现标签半菱形
<!DOCTYPE html> <html lang="en"> <head> <style> .span-line-begin { ...
- Sequelize模糊查询
const Sequelize = require('sequelize'); const Op = Sequelize.Op; User.findAll({ raw: true, order: [ ...
- 锐捷交换机如何配置远程管理地址(telnet)
基本命令如下: hostname(config)#username admin password 123456 ------>telnet 登录账号为admin密码为123456 hostna ...
- postman 用环境变量Environment实现多服务器版本
现存问题 在测试API期间,往往存在多种环境,对应IP地址(或域名也不同) 比如: Prod: http://116.62.25.57/ucows 用于开发完成发布到生产环境 Dev: http:// ...
- Operation之其他实用操作符
delay 该操作符会将 Observable 的所有元素都先拖延一段设定好的时间, 然后才将他们发送出来 Observable.of(1,2,3,4) .delay(5, scheduler: Ma ...
- Hive学习笔记——metadata
Hive结构体系 https://blog.csdn.net/zhoudaxia/article/details/8855937 可以在hive的jdbc接口中使用getMetaData方法来获取hi ...
- {Redis}NOAUTH Authentication required. Linux.cenOS
问题 [root@VM_0_12_centos redis]# ./bin/redis-cli -p 6379 127.0.0.1:6379> INFO NOAUTH Authenticatio ...
- 【NPDP笔记】第二章 组合管理
2.1 什么是产品组合 Product Portfolio 什么是组合管理,讲述的是完成正确的项目, 五大目标 财务稳健,财务目标 管道平衡,资源需求与可用资源之间的平衡 战略协同,与经营战略 组织战 ...
- 浅谈PageRank
浅谈PageRank 2017-04-25 18:00:09 guoziqing506 阅读数 17873更多https://blog.csdn.net/guoziqing506/article/de ...
- Unity3D 使用SQLite
使用Unity操作SQLite,需要用到三个库文件,分别是Mono.Data.Sqlite.dll和System.Data.dll和Sqlite3.dll,前两个库文件可以在unity中找到,具体步骤 ...
