简介

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添加的过程

  1. 调用Key的hashCode()方法生成一个hash值h1。
  • 如果这个h1在HashMap中不存在,那么直接将<key,value>添加到HashMap中。
  • 如果这个h1已经存在了那么找出HashMap中所有Hash值为h1的key。
  1. 分别调用equals()方法判断当前添加的key是否与已经存在的key值相同

如果相同,说明当前的Key已经存在。HashMap会使用新的value覆盖原有的value。

如果没有相同,说明当前的Key不存在。HashMap会创建新的映射关系。

  1. Hash冲突的解决。(当新增的key的Hash值在HashMap中存在时,就会产生冲突。一般有开放地址法、再Hash法、链地址法等解决Hash冲突问题。

    HashMap使用的是链地址法来解决冲突的

HashMap的查找过程

  1. 调用hashCode()方法获取Key的Hash值h,确定键为Key的所有值存储的首地址。
  2. 如果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());

来达到同步的效果。


  1. Iterator是一个对象,它的工作是遍历并选择序列中的对象,它提供了一种访问访问一个容器对象中的各个元素。而又不必暴露该对象内部细节的方法。 ↩︎

Java集合框架 面试问题整理的更多相关文章

  1. java集合框架面试要点整理

  2. 【转】Java集合框架面试问题集锦

    Java集合框架(例如基本的数据结构)里包含了最常见的Java常见面试问题.很好地理解集合框架,可以帮助你理解和利用Java的一些高级特性.下面是面试Java核心技术的一些很实用的问题. Q:最常见的 ...

  3. Java集合框架面试题目

    1.为什么Map接口不继承Collection 接口? Set是无序集合,并且不允许重复的元素 List是有序的集合,并且允许重复的元素 而Map是键值对 它被视为是键的set和值的set的组合 Ma ...

  4. Java集合框架相关知识整理

    1.常见的集合有哪些? Collection接口和Map接口是所有集合框架的父接口    Collection接口的子接口包括:Set接口和List接口    Map接口的实现类主要有:HashMap ...

  5. Java集合框架总结—超详细-适合面试

    Java集合框架总结—超详细-适合面试   一.精简: A.概念汇总 1.Java的集合类主要由两个接口派生而出:Collection和Map,Collection和Map是Java集合框架的根接口, ...

  6. Java集合框架(不全,待继续整理)

    技术在线学习网站: https://www.runoob.com/java/java-collections.html 从上面的集合框架图可以看到: 1.Java 集合框架主要包括两种类型的容器: 1 ...

  7. (转)Java集合框架:HashMap

    来源:朱小厮 链接:http://blog.csdn.net/u013256816/article/details/50912762 Java集合框架概述 Java集合框架无论是在工作.学习.面试中都 ...

  8. Java集合框架:HashMap

    转载: Java集合框架:HashMap Java集合框架概述   Java集合框架无论是在工作.学习.面试中都会经常涉及到,相信各位也并不陌生,其强大也不用多说,博主最近翻阅java集合框架的源码以 ...

  9. [转载]Java集合框架的常见面试题

    http://www.jfox.info/40-ge-java-ji-he-lei-mian-shi-ti-he-da-an 整理自上面链接: Java集合框架为Java编程语言的基础,也是Java面 ...

随机推荐

  1. Selenium+Java完整框架搭建(2019完整版)

    一.WebDriver框架开发实战 1.框架的思想 (1)什么是框架? 框架是可以被应用开发者定制的应用骨架 (2)为什么要写框架? 提高脚本可维护性 提高编写脚本的速度 提高脚本可阅读性 (3)框架 ...

  2. java中map和对象互转工具类的实现示例

    在项目开发中,经常碰到map转实体对象或者对象转map的场景,工作中,很多时候我们可能比较喜欢使用第三方jar包的API对他们进行转化,而且用起来也还算方便,比如像fastJson就可以轻松实现map ...

  3. 字节顺序&字节对齐

    一.字节顺序的产生 在计算机中,数据是以字节为单位存放的,而c语言中只有char才是一个字节,其他如int,float都是大于一个字节,所以就存在将数据按怎样的顺序存放的问题.一般有大端序和小端序两种 ...

  4. matlab学习笔记12_3串联结构体,按属性创建含有元胞数组的结构体,filenames,isfield,isstruct,orderfields

    一起来学matlab-matlab学习笔记12 12_3 结构体 串联结构体,按属性创建含有元胞数组的结构体,filenames,isfield,isstruct,orderfields 觉得有用的话 ...

  5. iOS - 在xib中UILabel文字如何换行

    在换行的位置按住Option + Enter键即可换行

  6. 设计模式php+java版本(1) 基础篇 七大原则

    2019年9月6日11:15:46 关于设计模式,其实就是编程思想的一个体现,有比较完善的编程思想写出的项目代码和没有编程思想的写出的差距巨大,代码的可读性,可维护性,可扩展性天差地别,有些刚接触的编 ...

  7. CentOS7开机进入紧急模式EmergencyMode的解决办法

    这个情况主要是 修改了 /etc/fstab 文件 vi /etc/fstab 文件 如果之前添加过一行 把添加的一行注释掉 如果之前没有添加过,把挂载到 /home 这一行取消注释 操作之后 记得 ...

  8. html5传感器

    html5传感器(注意苹果和安卓方向是相反的 回调函数触发的速度苹果要快很多 设置坐标不要设置在回调函数里)以下是代码<pre><!DOCTYPE html><html ...

  9. SGU 128. Snake --- 暴力枚举+并查集+贪心+计算几何

    <传送门> 128. Snake time limit per test: 0.25 sec. memory limit per test: 4096 KB There are N poi ...

  10. c++11多线程记录3: 数据争用和Mutex的使用

    https://www.youtube.com/watch?v=3ZxZPeXPaM4 学习视频 数据争用 简单来说就是存在多个线程同时对某个共同的对象进行读写(至少有一个线程在做写操作),造成读取这 ...