一 集合分类
- Collection 接口: 表示一组对象,是一种包含单个元素的集合。
- Map 接口: 表示一组键值对(key-value pairs),每个键映射到一个值。
二 Collection接口
(第一讲)Java常见的几种集合之Collection接口-CSDN博客https://blog.csdn.net/weixin_54094555/article/details/134844106
1 概述
是单例集合的顶层接口
2 方法
boolean add(E e) | 添加指定元素 |
boolean remove(Object o) | 移除指定元素 |
boolean contains(Object o) | 判断集合中是否存在指定的元素 |
int size() | 返回集合中元素的个数 |
boolean isEmpty() | 判断当前集合是否为空 |
void clear() | 清空集合中的元素 |
三 List接口
(第二讲)Java常见的几种集合之List接口-CSDN博客https://blog.csdn.net/weixin_54094555/article/details/134922719
1 特点
- 有序:存和取的元素顺序一致
- 有索引:可以通过索引操作元素
- 可重复:存储的元素可以重复
2 方法
boolean add(E e); | 添加指定元素 |
void add(int index, E element); | 在指定位置上添加元素 |
boolean remove(Object o); | 移除指定元素 |
E remove(int index); | 移除指定位置上的元素 |
E get(int index); | 获取指定索引的元素 |
E set(int index, E element); | 设置指定位置上的数值 |
int size(); | 获取集合的个数 |
void clear(); | 清空集合中的元素 |
int indexOf(Object o); | 获取指定元素第一次出现的位置 |
int lastIndexOf(Object o); | 获取指定元素最后一次出现的位置 |
3 实现类
- ArrayList:底层是数组,线程不安全的,有序,可重复,有索引(使用场景:想要集合中的元素可以重复)
- LinkedList:底层是双向链表,线程不安全的,有序,可重复,有索引(使用场景:想要集合中的元素可以重复,而且当前的增删操作明显多于查询的)
- Vector:底层是数组,线程不安全的,有序,可重复,有索引
四 Set接口
(第三讲)Java常见的几种集合之Set接口-CSDN博客https://blog.csdn.net/weixin_54094555/article/details/135205603
1 特点
- 无序:
Set
不保证元素的顺序,即元素不按照特定的顺序存储和访问。 - 不可重复:不允许包含重复的元素。如果试图向
Set
中添加已经存在的元素,add
方法将返回false
。 - 无索引:没有带索引的方法,所以不能使用普通for循环遍历,也不能通过索引来获取元素。
2 方法
boolean add(E e) | 添加指定元素 |
boolean remove(Object o) | 移除指定元素 |
boolean contains(Object o) | 判断集合中是否存在指定的元素 |
int size() | 返回集合中元素的个数 |
boolean isEmpty() | 判断当前集合是否为空 |
void clear() | 清空集合中的元素 |
3 实现类
- HashSet:底层是哈希表,线程不安全的,无序,不重复,无索引(使用场景:对集合中的元素去重)
- LinkedHashSet:底层是链表+哈希表,线程不安全的,有序,不重复,无索引(使用场景:对集合中的元素去重,而且保证存取顺序)
- TreeSet:底层是二叉树,线程不安全的,可排序,不重复,无索引(使用场景:对集合中的元素进行排序)
五 Map接口
(第四讲)Java常见的几种集合之Map接口-CSDN博客https://blog.csdn.net/weixin_54094555/article/details/135225518
1 特点
- 键值对存储:
Map
存储的是键值对,每个键对应一个值。 - 唯一键:每个键必须是唯一的,不能存在重复的键。
- 允许多个键对应相同的值:不同的键可以映射到相同的值,但每个键只能映射到一个值。
- 键和值可以为 null:
Map
允许键和值都为null
。当然,由于键必须是唯一的,因此只能有一个键为null
。
2 方法
V put(K key, V value); | 添加元素 |
V remove(Object key); | 通过键移除元素 |
boolean containsKey(Object key); | 判断集合是否包含指定的键 |
boolean containsValue(Object value); | 判断集合是否包含指定的值 |
V get(Object key); | 通过键获取值 |
int size(); | 返回集合的长度,也就是键值对的个数 |
boolean isEmpty(); | 判断集合是否为空 |
void clear(); | 移除所有元素 |
Set<K> keySet(); | 返回所有键的set集合 |
Collection<V> values(); | 返回所有值的单列集合 |
Set<Map.Entry<K, V>> entrySet(); | 返回一个包含所有键值对的set集合 |
3 实现类
- HashMap:底层是哈希表+链表/哈希表+红黑树,无序、不重复、无索引
- LinkedHashMap:底层是双链表+哈希表,有序、不重复、无索引
- HashTable
- Properties
- TreeMap:底层是红黑树,可排序,不重复,无索引
六 引用
[ java基础 ] 集合: 扩容机制&底层源码分析_集合的扩容机制-CSDN博客