集合的框架和体系
Collection 接口和常用方法
- collection 实现子类可以存放多个元素,每个元素可以是 Object
- 有些 Collection 的实现类,可以存放重复的元素,有些不可以
- 有些 Collection 的实现类,有些是有序的(List),有些不是有序的(Set)
- Collection 接口没有直接的实现子类,是通过它的子接口 Set 和 List 来实现的
方法 | 说明 |
---|---|
add | 添加单个元素 |
remove | 删除指定元素 |
contains | 查找元素是否存在 |
size | 获取元素个数 |
isEmpty | 判断是否为空 |
clear | 清空 |
addAll | 添加多个元素 |
containsAll | 查找多个元素是否存在 |
removeAll | 删除多个元素 |
使用 Iterator(迭代器) 遍历元素
- Iterator 对象称为迭代器,主要用于遍历 Collection 集合中的元素
- 所有实现了 Collection 接口的集合类都有一个 iteraor()方法,用以返回一个实现了 Iterator 接口的对象,即可以返回一个迭代器
- Iterator 仅用于遍历集合,Iterator 本身并步存放对象
使用增强 for 循环来遍历元素🚩
增强 for 循环就是简化版的 iterator,本质一样。只能用于遍历集合或数组。
for (Object dog : list) {
System.out.println("dog=" + dog);
}
List 接口和常用方法
List 接口的基本介绍
-
List 集合类中元素有序(即添加顺序和取出顺序一致),且可重复
-
List 集合中的每个元素都有其对应的顺序索引,即支持索引
-
List 集合中的元素可以根据序号取,即
list.get()
-
JDK API 中 List 接口的实现类中常用的有:ArrayList、LinkedList、Vector
List 接口的常用方法
- void add(int index,Object ele) 在 index 位置插入 ele 元素
- boolean addAll(int index, Collections eles) 从 index 位置开始将 eles 中的所有元素添加进来
- Object get(int index):获取指定 index 位置的元素
- int indexOf(Object obj):返回 obj 在集合中首次出现的位置
- int lastIndexOf(Object obj):返回 obj 在当前集合中末次出现的位置
- Object remove(int index):移除指定 index 位置的元素,并返回此元素
- Object set(int index, Object els):设置指定 index 位置的元素为 ele
- List subList(int formIndex, int toIndex):返回从 fromIndex 到 toIndex 位置的子集合
List 的遍历
建议使用增强 for 循环
for(Object o: col){
}
ArrayList 底层结构和源码分析🚩
Vector 底层结构和源码分析🚩
LinkedList 底层结构和源码分析🚩
Set 接口和常用方法
Set 接口基本介绍
- 无序(添加和取出的顺序不一致),没有索引
- 不允许重复元素,所以最多包含一个 null
- JDK API 中 Set 接口的实现类常见的有:HashSet、TreeSet
Set 接口的常用方法****和遍历方式
和 List 接口一样
HashSet 底层结构和源码分析
LinkedHashSet 底层结构和源码分析
Map 接口和常用方法
Map 接口基本介绍
- Map 用于保存具有映射关系的数据:Key-Value
- Map 中的 key 和 value 可以是任何引用类型的数据,会封装到 HashMap$Node 对象中
- Map 中的 key 不允许重复,Map 中的 value 可以重复
- Map 的 key 可以为 null,value 也可以为 null,注意 key 为null只能有一个,value 为 null,可以多个
- 常用 String 类作为 Map 的 key
- key 和 value 之间存在单向一对一关系,即通过指定的 key 总能找到对应的 value
map 接口常用方法
- put 添加
- remove 根据键删除映射关系
- get 根据键获取值
- size 获取元素个数
- isEmpty 判断个数是否为 0
- clear 清除
- containsKey 查找键是否存在
map 的六大遍历方式
// 先取出 所有的 Key , 通过 Key 取出对应的 Value
Set keyset = map.keySet();
for (Object key : keyset) {
System.out.println(key + "-" + map.get(key));
}
HashMap
- HashMap 是 Map 接口使用频率最高的实现类
- HashMap 是以 key-val 对的方式来存储数据
- key 不能重复,但是值可以重复,允许使用 null 键和 null 值
- 如果添加相同的 key,则会覆盖原来的 key-val,等同于修改
- 与 HshSet 一样,不保证映射的顺序,因为底层是以 hash 表的方式来存储的
- HashMap 没有实现同步,因此是线程不安全的,方法没有作同步互斥的操作,没有 synchonized
HashMap 底层结构和源码分析
开发中如何选择集合实现类
-
先判断存储类型(一组对象[单列]或一组键值对[双列])
-
一组对象[单列]:Collection 接口
允许重复:List
增删多:LinkedList 底层维护了一个双向链表
改查多:ArrayList 底层维护了 Object 类型的可变数组
不允许重复:Set
无序:HashSet 底层是 HashMap,维护了一个哈希表 即数组+链表+红黑树
排序:TreeSet
插入和取出顺序一致:LinkedHashSet,维护数组+双向链表
-
一组键值对[双列]:Map
键无序:HashMap,底层是哈希表,jdk8:数组+链表+红黑树
键排序:TreeMap
键插入和取出顺序一致:LinkedHashMap
读取文件 Properties