集合框架
1. Collection集合
1.1 数组和集合的区别
- 相同点
都是容器,可以存储多个数据 - 不同点
- 数组的长度是不可变的,集合的长度是可变的
- 数组可以存基本数据类型和引用数据类型
集合只能存引用数据类型,如果要存基本数据类型,需要存对应的包装类
1.2 Colletion集合体系结构
graph TD;
A{Collection}-->B{List};
B-->B1(ArrayList);
B-->B2(LinkedList);
B-->B3(Vector);
A-->C{Set};
C-->C1(HashSet);
C-->C2(TreeSet);
C1-->C11(LinkedHashSet);
List系列集合:添加的元素是有序,可重复,有索引的
Set系列集合:添加到元素是无序,不重复,无索引的
1.3 Collection集合概述和使用
常用API
| 方法名 | 说明 |
|---|---|
| boolean add(E e) | 添加元素 |
| boolean remove(Object o) | 从集合中移除指定的元素 |
| boolean removeIf(Object o) | 根据条件进行移除 |
| void clear() | 清空集合中的元素 |
| boolean contains(Object o) | 判断集合中是否存在指定的元素 |
| boolean isEmpty() | 判断集合是否为空 |
| int size() | 集合的长度,也就是集合中元素的个数 |
代码实现
1 | import java.util.ArrayList; |
1.4 Collection集合遍历方式
- 迭代器遍历
- 增强for遍历
- Lambda表达式遍历
1.4.1 迭代器遍历
迭代器在Java中的类是Iterator,迭代器是集合专用的遍历方式
=迭代器就好比是一个箭头,默认执行集合的0索引处=
最大特点:迭代器不依赖索引,像数组一样靠偏移
常用方法
- Collection集合获取迭代器| 方法名称 | 说明 |
| ——– | —- |
| | | - Iterator中的常用方法| 方法名称 | 说明 |
| —————– | ———————————————————– |
| boolean hasNext() | 判断当前位置是否有元素,有元素则返回true,没有元素返回false |
| E next() | 获取当前位置的元素,并将迭代器对象移向下一个位置 |
代码实现
1 | import java.util.ArrayList; |
迭代器的细节注意点:
- 报错NoSuchElementException
- 迭代器遍历完毕,指针不会复位
如果要继续第二次遍历集合,只能再获取一个新的迭代器对象 - 循环中只能用一次next方法(不然可能会报错)
- 迭代器遍历时,不能用集合的方法进行增加或者删除(得看源码)
1. Map集合
1.1 Map集合体系结构
graph TD;
A(Map) --> B(HashMap);
A --> C(TreeMap);
B --> D(LinkedHashMap);
A --> E(HashTable);
E --> F(Properties);
G(Dictionary) --> E;
1.2 Map集合概述和特点
概述
1 | interface Map<K,V> K:键的类型;V:值的类型 |
常用API
| 方法名 | 说明 |
|---|---|
| V put(K key,V value) | 添加元素 |
| V remove(Object key) | 根据键删除键值对元素 |
| void clear() | 移除所有的键值对元素 |
| boolean containsKey(Object key) | 判断集合是否包含指定的键 |
| boolean containsValue(Object value) | 判断集合是否包含指定的值 |
| boolean isEmpty() | 判断集合是否为空 |
| int size() | 集合的长度,也就是集合中键值对的个数 |
1 | import java.util.HashMap; |
Map集合的三种遍历方式
- 键找值
- 键值对
- Lambda表达式
1
map.forEach((key, value)-> System.out.println(key + "=" + value));
2. HashMap
2.1 HashMap集合概述和特点
没有格外方法,跟Map方法一样。
由键决定:无序,不重复,无索引
底层原理
- HashMap底层是哈希表结构的
- 依赖hashCode方法和equals方法保证键的唯一
- 如果键要存储的是自定义对象,需要重写hashCode和equals方法
2.2 LinkedHashMap
- 由键决定:有序,不重复,无索引
- 有序指的是存储和取出的元素顺序一致
- 原理:底层数据结构依然是哈希表,只是每个键值对元素由额外的多了一个双链表的机制激励存储的顺序
评论




