简介

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. 【SpringBoot】SpringBoot配置与单元测试(二)

    SpringBoot项目创建参考[SpringBoot]SpringBoot快速入门(一) 本文介绍SpringBoot项目的POM文件.配置与单元测试 POM文件 1.SpringBoot的pom文 ...

  2. Unity2018安装

    1. 直接安装 2.  先安装Unity 2018.2.14f1 若有C:\ProgramData\Unity文件夹,删除这个文件夹下的所有文件 3. 解压 unity2018破解.zip 将最后一个 ...

  3. 发布微信小程序体验版

    小程序这么火,一直没有做过.因为公司有个业务需要做小程序就顺带学习了一把. 1)本次是采用<微信开发者工具 Stable v1.02.1904090>进行的开发: 2)前端使用的是微信官方 ...

  4. 何为JavaScript原型?读完你就明白了

    熟悉软件开发的朋友都知道,原型是产品或数据系统的一个基本的实用模型,通常为示范目的或开发程序的部份结构.原型的重要性不言而喻,接下来我就会为你讲解关于JavaScript中的原型概念.原型对象释义每一 ...

  5. Graph machine learning 工具

    OGB: Open Graph Benchmark https://ogb.stanford.edu/ https://github.com/snap-stanford/ogb OGB is a co ...

  6. tp5.1 根据IP地址获取用户所在省市(个人笔记)

    class IPAddress extends Common { /** * 根据ip地址,获取用户所在省市 */ public function ipIndex() { $ip = "22 ...

  7. 【LEETCODE】67、分治递归,medium&hard级别,题目:215、312

    我被这些题整哭了,你呢??? 日了狗啊...... 好难啊.... 按照这个样子搞,不用找工作了,回家放牛去....... package y2019.Algorithm.divideandconqu ...

  8. git 学习笔记---操作标签

    如果标签打错了,也可以删除: $ git tag -d v0.1 Deleted tag 'v0.1' (was f15b0dd) 因为创建的标签都只存储在本地,不会自动推送到远程.所以,打错的标签可 ...

  9. 如何配置这个maven仓库的源http://mvnrepository.com/repos

    http://mvnrepository.com/repos 主要是ID .mirrorof.name 怎么配置,这个网站上有spring5.0的,别的仓库没有,我需要这个源. 原文地址:https: ...

  10. 1、C#多线程基础理论

    系统为应用程序分配所需的内存以及其他资源,内存和资源的物理分离叫做进程.   进程是以线程为单位竞争CPU,那么什么是线程呢? 线程可看成一个可执行的指令单元,他使用进程中的数据,包含若干条指令,进程 ...