JAVA集合框架体系

芋圆院长 / 2023-09-11 / 原文

集合框架 -- 容器 包容
JAVA集合框架中的类可以用于存储多个队系那个,还可用于保存具有映射关系的关联数组。

Collection接口

单列数据集合。存储一个一个的数据。

# 常用方法:增
add(E obj) --> 加的是一个
addall(Collection other) --> 加基本单元,五个小单元组成的中单元 放进去也是5个小单元。
# 常用方法:判断
size()
isEmpty()
contains(Object obj) --> 调用equals方法比较
containsAll(Collection coll)
equals(Object obj) 【很少用】
# 常用方法:删
clear()
remove(Object obj) --> 调用equals方法
removeAll(Collection coll)
retainAll(Collection coll) --> 取交集
# 常用方法:变
toArray() --> 返回包含当前集合中所有元素的数组【集合转换为数组】
hashCode() --> 获取集合对象的哈希值
iterator() --> 返回迭代器,用于集合遍历

【数组转换为集合】Arrays的asList方法(只能放对象,不能放基本数据类型)

注:自定义的类写入集合,必须重写equals方法。

迭代器

iterator 迭代器接口,本身并不提供存储对象的能力,主要用于遍历 Collection 中的元素。
接口中常用的方法 iterator()\ next()\ hasNext()
遍历时注意要先判断后面空不空,再去遍历,否则会报错。【注意指针指的是第一个元素的前一个,hasnext一次 指针移动一次,每次操作的都是同一个对象】
使用迭代器可以删除集合的元素,但要使用iterator的remove方法,不能用集合对象的remove方法。【可以实现按照指定条件进行删除的功能】

增强for循环 【foreach】

for(元素的数据类型 局部变量 : Collection集合或数组){
操作
}

内部原理是迭代器,注意循环里的是临时变量 可能不会生效。

List子接口 -- 动态数组

增、删、改、查、插、长度和遍历

# 获取
get(int index)
subList(int index, int toIndex)
indexOf(object obj)
lastIndexOf(Object obj)
# 插入
add(int index, Object ele)
addAll(int index, Collection eles)
# 删除和替换
remove(int index)
set(int index, Object ele)

实现类

  1. ArrayList:线程不安全,效率高,使用频率高,底层是数组 obj
  2. Vector:线程安全,效率低,但不怎么用,底层是数组 obj。慢,尽量避免使用
  3. LinkedList:底层采用链表(双向链表)结构存储数据决定,便于增删。
addFirst(Object obj)
addLast(Object obj)
getFirst()
getLast()
removeFirst()
removeLast()

Set子接口

使用频率较低,一般用来过滤重复数据

实现类

HashSet

底层使用HashMap(数组 + 单向链表 + 红黑树)
集合元素可以是null,不是线程安全的,不能保证元素的排列顺序。
判断元素相同的标准 -- hashcode -- equals【所以一定要重写!】

LinkedHashSet

HashSet的子类,在原有基础添加双向链表记录添加顺序,可以按照元素顺序遍历。底层使用
TreeSet

Map接口

存储具有映射关系键值对的集合。

实现类

HashMap
LinkedHashMap
TreeMap
Hashtable
Properties

Properties