一、概述
Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。Collection 接口又有 3 种子类型,List、Set 和 Queue,再下面是一些抽象类,最后是具体实现类,常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap 等等。
所有的集合框架都包含如下内容:
(1)接口:是代表集合的抽象数据类型。例如 Collection、List、Set、Map 等。之所以定义多个接口,是为了以不同的方式操作集合对象
(2)实现(类):是集合接口的具体实现。从本质上讲,它们是可重复使用的数据结构,例如:ArrayList、LinkedList、HashSet、HashMap。
(3)算法:是实现集合接口的对象里的方法执行的一些有用的计算。
二、Collection接口
存储一组 不唯一,无序的对象
1、常用方法
(1)boolean add(Object obj):向集合中添加Object型元素
(2)int size():获取集合中元素的个数
(3)void clear():清空集合中的所有元素
(4)boolean contains(Object o):判断集合中是否存在某个指定对象
(5)boolean remove(Object o):删除集合中的指定对象
(6)boolean isEmpty():判断集合中的元素个数是否为0
(7)Object[] toArray():把集合中的元素转成数组返回
(8)Iterator iterator():返回集合中的迭代器对象
(9)boolean contains(Object o):判断当前集合是否包含obj
(10)void retainAll():获取两个集合的交集
(11)集合转换为数组:toArray()
(12)数组转换为集合:asList()
Iterator中有两个方法:
(1)boolean hasNext():迭代过程中判断是否还有元素可迭代。
(2)Object next():返回迭代的下一个元素
三、List接口
存储一组不唯一,有序(插入顺序)的对象
1、ArrayList
(1)实现了长度可变的数组,在内存中分配连续的空间,遍历元素和随机访问元素的效率比较高
(2)ArrayList类是List接口的一个具体实现类;
ArrayList对象实现了可变大小的数组;
随机访问和遍历元素时,它提供更好的性能
(3)常用方法
方法名 | 说明 |
boolean add(Object o) | 在列表的末尾顺序添加元素,起始索引位置从0开始 |
void add(int index,Object o) | 在指定的索引位置添加元素。索引位置必须介于0和列表中元素个数之间 |
int size() | 返回列表中的元素个数 |
Object get(int index) | 返回指定索引位置处的元素。取出的元素是Object类型,使用前需要进行强制类型转换 |
boolean contains(Object o) | 判断列表中是否存在指定元素 |
boolean remove(Object o) | 从列表中删除元素 |
Object remove(int index) | 从列表中删除指定位置元素,起始索引位置从0开始 |
2、LinkedList
(1)采用链表存储方式,插入、删除元素时效率比较高
(2)LinkedList类是List接口的一个具体实现类;
LinkedList 类用于创建链表数据结构;
插入或者删除元素时,它提供更好的性能
3、常用方法
方法名 | 说明 |
void addFirst(Object o) | 在列表的首部添加元素 |
void addLast(Object o) | 在列表的末尾添加元素 |
Object getFirst() | 返回列表中的第一个元素 |
Object getLast() | 返回列表中的最后一个元素 |
Object removeFirst() | 删除并返回列表中的第一个元素 |
Object removeLast() | 删除并返回列表中的最后一个元素 |
四、set接口
1、存储一组唯一,无序的对象,HashSet是Set接口常用的实现类,是一个不允许有重复元素的集合。
2、遍历集合的方法
方法1:通过迭代器Iterator实现遍历
Iterator iterator = coll.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
方法2:增强型for循环
for (String str:set) {
System.out.println(str);
}
3、常用方法
方法 | 操作 |
void add(Object o) | 向set集合中添加元素 |
int size() | 返回set集合中的元素个数 |
boolean remove(Object o) | 删除Set集合中的元素 |
boolean isEmpty(Object o) | 判断set集合中是否包含元素o |
void clear() | 清空set集合中的所有元素 |
boolean contains(Object o) | 判断set集合中是否包含元素o |
terator iterator() | 返回集合中的迭代器对象 |
五、Map接口
1、存储一组键值对象,提供key到value的映射
2、HashMap原理
hashMap是由数组和链表这两个结构来存储数据。
数组:存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);寻址容易,插入和删除困难;
链表:存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N);寻址困难,插入和删除容易。
3、常用方法
方法 | 描述 |
---|---|
clear() | 删除 hashMap 中的所有键/值对 |
clone() | 复制一份 hashMap |
isEmpty() | 判断 hashMap 是否为空 |
size() | 计算 hashMap 中键/值对的数量 |
put() | 将键/值对添加到 hashMap 中 |
putAll() | 将所有键/值对添加到 hashMap 中 |
putIfAbsent() | 如果 hashMap 中不存在指定的键,则将指定的键/值对插入到 hashMap 中。 |
remove() | 删除 hashMap 中指定键 key 的映射关系 |
containsKey() | 检查 hashMap 中是否存在指定的 key 对应的映射关系。 |
containsValue() | 检查 hashMap 中是否存在指定的 value 对应的映射关系。 |
replace() | 替换 hashMap 中是指定的 key 对应的 value。 |
replaceAll() | 将 hashMap 中的所有映射关系替换成给定的函数所执行的结果。 |
get() | 获取指定 key 对应对 value |