韩顺平java基础-14-集合

韩顺平java基础-14-集合

集合介绍

理解

好处

框架体系图

主要有两组

Collection(单列集合)\Map(双列集合)


Collection

Collection通用

方法

遍历

迭代器遍历

iterator 底层原理:

hasNext()

快捷键:ctrl + j

增强for循环

本质仍然是iterator

在集合和数组中均可以使用


List

通用

接口

  1. 添加顺序与取出顺序一致,且可以重复
  2. 每个元素都有对应的顺序索引,且可以通过索引取出

常用方法

三种遍历

  1. iterator迭代器遍历
  2. 增强for循环
  3. 普通for循环(把list当作普通数组遍历)

LinkedList、Vector原理同List一致


ArrayList

扩容机制

  1. 无参构造器 初始大小为10 而后扩容为1.5倍
  2. 指定大小构造器 扩容为1.5倍

底层源码


Vector

扩容机制

  1. 无参构造器 初始大小为10 而后扩容为2倍
  2. 指定大小构造器 扩容为2倍

LinkedList

底层结构

  1. 底层是双向链表
  2. 维护两个属性 first和last 分别指向 首节点和尾节点
  3. 每个结点(Node),里面维护了prev、next、item三个属性
  4. LinkedList的添加和删除,不是通过数组实现,相对来说效率较高

ArrayList和LinkedList的比较

  1. ArrayList改查效率高
  2. LinkedList增删效率高
  3. 也可以根据业务灵活选择

Set

通用


HashSet

特点

  1. HashSet实现了Set接口,实际上是HashMap

  2. 可以存放null,但是只能有一个null

  3. 不保证元素是有序的

  4. 不能有重复元素

不能添加相同的元素 说明:

HashSet的底层机制

HashSet的底层是HashMap,HashMap的底层是(数组 + 链表 + 红黑树)

HashSet扩容机制

每向hashset增加一个元素,数组就会加一


LinkedHashSet

基础

  1. LinkedHashSet是HashSet的子类
  2. 维护了一个hash表和双向链表,在遍历时可以确保插入顺序和遍历顺序一致
  3. LinkedHashSet有head和tail,每一个节点有before和after属性,形成双向链表

源码分析

  1. LinkedHashSet底层维护的是LinkedHashMap
  2. LinkedHashMap$Entry 继承--> HashMap$Node

Map

接口特点

  1. Map与Collection并列存在,保存具有映射关系的数据:key - Value(双列元素)Collection中value存放常量PRESENT
  2. Map中的key和value可以是任何引用类型的数据,会封装到HashMap$Node对象中
  3. Map中的key不允许重复,而value可以重复(key相当于Map中的索引,key-value是一一对应的关系,通过key就可以找到value(get()))
  4. Map的key和value可以为null
  5. 常用String类作为Map的key
posted @ 2024-02-28 17:29  forest-pan  阅读(17)  评论(0编辑  收藏  举报