Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)

Java集合

  • 一、Java集合框架
      • 集合框架前序:
      • 集合框架概述(一)
      • 集合框架概述(二)(集合的使用场景)
      • 集合框架概述(三)(Collection接口继承树)
      • 集合框架概述(三)(Map接口继承树)
  • 二、Collection接口方法
      • ①Collection接口
      • ②Collection接口方法
  • 三、Iterator迭代器接口
      • ①使用 Iterator 接口遍历集合元素
      • ②Iterator接口的方法
      • ③ Iterator迭代器接口
      • ④使用 foreach 循环遍历集合元素
  • 四、Collection子接口一:List
      • ①List接口概述
      • ②List接口方法
      • ③List实现类之一:ArrayList
      • ④List实现类之二:LinkedList
      • ⑤List实现类之二:LinkedList
      • ⑥List 实现类之三:Vector
      • ⑦面试题
  • 五、Collection子接口二:Set
      • ①Set 接口概述
      • ②Set实现类之一:HashSet
      • ③重写 hashCode() 方法的基本原则
      • ④Eclipse/IDEA工具里hashCode()的重写
      • ⑤Set实现类之二:LinkedHashSet
      • ⑥Set实现类之三:TreeSet
      • ⑦排 序—自然排序
      • ⑧排 序—定制排序
      • ⑨练习:在List内去除重复数字值,要求尽量简单
  • 六、Map接口
      • ①Map接口继承树
      • ②Map接口概述
      • ③Map接口:常用方法
      • ④Map实现类之一:HashMap
      • ⑤HashMap的存储结构
      • ⑥HashMap源码中的重要常量
      • ⑦HashMap的存储结构:JDK 1.8之前
      • ⑧HashMap的存储结构:JDK 1.8
      • ⑨面试题
      • ⑩Map实现类之二:LinkedHashMap
      • ⑩①Map实现类之三:TreeMap
      • ⑩②Map实现类之四:Hashtable
      • ⑩③Map实现类之五:Properties
  • 七、Collections工具类
      • ①Collection工具类常用方法
      • ②Collections常用方法:同步控制
      • ③补充:Enumeration

一、Java集合框架

集合框架前序:

  早在 Java 2 中之前,Java 就提供了特设类。比如:Dictionary, Vector, Stack, 和 Properties 这些类用来存储和操作对象组。虽然这些类都非常有用,但是它们缺少一个核心的,统一的主题。由于这个原因,使用 Vector 类的方式和使用 Properties 类的方式有着很大不同。

集合框架被设计成要满足以下几个目标。

  • 该框架必须是高性能的。基本集合(动态数组,链表,树,哈希表)的实现也必须是高效的。

  • 该框架允许不同类型的集合,以类似的方式工作,具有高度的互操作性。

  • 对一个集合的扩展和适应必须是简单的。

  为此,整个集合框架就围绕一组标准接口而设计。你可以直接使用这些接口的标准实现,诸如: LinkedList, HashSet, 和 TreeSet 等,除此之外你也可以通过这些接口实现自己的集合。
Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第1张图片

集合框架概述(一)

  • 一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储。另一方面,使用Array存储对象方面具有一些弊端,而Java 集合就像一种容器,可以动态地把多个对象的引用放入容器中。
    –>数组在内存存储方面的特点:
       ①数组初始化以后,长度就确定了。
       ②数组声明的类型,就决定了进行元素初始化时的类型。
    –>数组在存储数据方面的弊端:
       ①数组初始化以后,长度就不可变了,不便于扩展。
       ②数组中提供的属性和方法少,不便于进行添加、删除、插入等操
       作,且效率不高。同时无法直接获取存储元素的个数。
       ③数组存储的数据是有序的、可以重复的。–>存储数据的特点单一
  • Java 集合类可以用于存储数量不等的多个对象,还可用于保存具有映射关系的关联数组。

集合框架概述(二)(集合的使用场景)

Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第2张图片
Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第3张图片

集合框架概述(三)(Collection接口继承树)

Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第4张图片

集合框架概述(三)(Map接口继承树)

Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第5张图片

二、Collection接口方法

①Collection接口

  • Collection 接口是 List、Set 和 Queue 接口的父接口,该接口里定义的方法
    既可用于操作 Set 集合,也可用于操作 List 和 Queue 集合。
  • JDK不提供此接口的任何直接实现,而是提供更具体的子接口(如:Set和List)
    实现。
  • 在 Java5 之前,Java 集合会丢失容器中所有对象的数据类型,把所有对象都
    当成 Object 类型处理;从 JDK 5.0 增加了泛型以后,Java 集合可以记住容
    器中对象的数据类型。

②Collection接口方法

Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第6张图片
Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第7张图片

三、Iterator迭代器接口

①使用 Iterator 接口遍历集合元素

  • Iterator对象称为迭代器(设计模式的一种),主要用于遍历 Collection 集合中的元素。
  • GOF给迭代器模式的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。迭代器模式,就是为容器而生。类似于“公交车上的售票员”、“火车上的乘务员”、“空姐”。
  • Collection接口继承了java.lang.Iterable接口,该接口有一个iterator()方法,那么所有实现了Collection接口的集合类都有一个iterator()方法,用以返回一个实现了Iterator接口的对象。
  • Iterator 仅用于遍历集合,Iterator 本身并不提供承装对象的能力。如果需要创建Iterator 对象,则必须有一个被迭代的集合。
  • 集合对象每次调用iterator()方法都得到一个全新的迭代器对象,默认游标都在集合的第一个元素之前。

②Iterator接口的方法

Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第8张图片

③ Iterator迭代器接口

Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第9张图片
Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第10张图片
Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第11张图片

④使用 foreach 循环遍历集合元素

Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第12张图片

四、Collection子接口一:List

①List接口概述

  • 鉴于Java中数组用来存储数据的局限性,我们通常使用List替代数组
  • List集合类中元素有序、且可重复,集合中的每个元素都有其对应的顺序索引。
  • List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据
    序号存取容器中的元素。
  • JDK API中List接口的实现类常用的有:ArrayList、LinkedList和Vector。

②List接口方法

Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第13张图片

③List实现类之一:ArrayList

Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第14张图片

④List实现类之二:LinkedList

Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第15张图片

⑤List实现类之二:LinkedList

Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第16张图片

⑥List 实现类之三:Vector

Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第17张图片

⑦面试题

Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第18张图片

五、Collection子接口二:Set

①Set 接口概述

  • Set接口是Collection的子接口,set接口没有提供额外的方法
  • Set 集合不允许包含相同的元素,如果试把两个相同的元素加入同一个
    Set 集合中,则添加操作失败。
  • Set 判断两个对象是否相同不是使用 == 运算符,而是根据 equals() 方法

②Set实现类之一:HashSet

Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第19张图片
Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第20张图片
Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第21张图片

③重写 hashCode() 方法的基本原则

  • 在程序运行时,同一个对象多次调用 hashCode() 方法应该返回相同的值。
  • 当两个对象的 equals() 方法比较返回 true 时,这两个对象的 hashCode()
    方法的返回值也应相等。
  • 对象中用作 equals() 方法比较的 Field,都应该用来计算 hashCode 值。

以自定义的Customer类为例,何时需要重写equals()?

  • 当一个类有自己特有的“逻辑相等”概念,当改写equals()的时候,总是
    要改写hashCode(),根据一个类的equals方法(改写后),两个截然不
    同的实例有可能在逻辑上是相等的,但是,根据Object.hashCode()方法,
    它们仅仅是两个对象。
  • 因此,违反了“相等的对象必须具有相等的散列码”。
  • 结论:复写equals方法的时候一般都需要同时复写hashCode方法。通
    常参与计算hashCode的对象的属性也应该参与到equals()中进行计算。

④Eclipse/IDEA工具里hashCode()的重写

Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第22张图片

⑤Set实现类之二:LinkedHashSet

  • LinkedHashSet 是 HashSet 的子类
  • LinkedHashSet 根据元素的 hashCode 值来决定元素的存储位置,但它同时使用双向链表维护元素的次序,这使得元素看起来是以插入顺序保存的。
  • LinkedHashSet插入性能略低于 HashSet,但在迭代访问 Set 里的全部元素时有很好的性能。
  • LinkedHashSet 不允许集合元素重复。

Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第23张图片

⑥Set实现类之三:TreeSet

Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第24张图片
Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第25张图片

⑦排 序—自然排序

Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第26张图片
Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第27张图片

⑧排 序—定制排序

Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第28张图片

⑨练习:在List内去除重复数字值,要求尽量简单

Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第29张图片

六、Map接口

①Map接口继承树

Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第30张图片

②Map接口概述

Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第31张图片
Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第32张图片

③Map接口:常用方法

Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第33张图片
Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第34张图片

④Map实现类之一:HashMap

Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第35张图片

⑤HashMap的存储结构

Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第36张图片
Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第37张图片

⑥HashMap源码中的重要常量

Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第38张图片

⑦HashMap的存储结构:JDK 1.8之前

Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第39张图片
Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第40张图片

⑧HashMap的存储结构:JDK 1.8

Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第41张图片
Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第42张图片
Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第43张图片

⑨面试题

  谈谈你对HashMap中put/get方法的认识?如果了解再谈谈HashMap的扩容机制?默认大小是多少?什么是负载因子(或填充比)?什么是吞吐临界值(或阈值、threshold)?
  面试题:负载因子值的大小,对HashMap有什么影响
Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第44张图片

⑩Map实现类之二:LinkedHashMap

  • LinkedHashMap 是 HashMap 的子类
  • 在HashMap存储结构的基础上,使用了一对双向链表来记录添加
    元素的顺序
  • 与LinkedHashSet类似,LinkedHashMap 可以维护 Map 的迭代
    顺序:迭代顺序与 Key-Value 对的插入顺序一致
    Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第45张图片

⑩①Map实现类之三:TreeMap

Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第46张图片

⑩②Map实现类之四:Hashtable

Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第47张图片

⑩③Map实现类之五:Properties

Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第48张图片

七、Collections工具类

①Collection工具类常用方法

Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第49张图片
Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第50张图片

②Collections常用方法:同步控制

Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第51张图片

③补充:Enumeration

Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)_第52张图片

你可能感兴趣的:(java,java,intellij,idea,Java高级部分,集合)