集合框架
一、概述
1、概念
Java集合框架为我们提供了一套性能优良,使用方便的接口和类,它们都位于java.util包中。
集合框架是为了表现和操作集合而规定的一种统一的标准结构。集合框架都包含三大块内容:对外接口,接口的实现和对集合运算的算法。如下:
- 接口:表示集合的抽象数据类型,在下图中以虚线框表示,如Collection、List、Set、Map、Iterator
- 实现:集合框架中接口的具体实现,在下图以实线框表示,粗实线框表示最常用的实现,如ArrayList、LinkedList、HashMap、HashSet
- 算法:在一个实现了某个集合框架的接口的对象身上完成某种有用的计算的方法,如查找、排序等。Java提供了进行集合操作的工具类:Collections,它提供了对集合进行排序等多种算法实现。
2、分类
Java集合框架中的两大类接口:Collection和Map,其中Collection有两个子接口:List和Set。通常说Java集合框架共有三大类接口:**List,Set和Map。**它们的共同点:都是集合接口,可以用来存储很多对象,它们的区别如下:
- Collection:接口存储一组不唯一,无序的对象
- Set:继承Collection接口,存储一组唯一,无序的对象
- List:继承Collection接口,存储一组不唯一,有序的对象
- Map:存储一组成对的键-值对象,提供key(键)到value(值)的映射。
- Iterator:负责定义访问和遍历元素的接口
二、集合介绍
1、List接口
实现List接口常用类有ArrayList和LinkedList。它们可以容纳所有类型的对象,包括null,允许重复,并且都保证元素的存储顺序。
常用方法如下:
方法名称 | 说明 |
---|---|
boolean add(objcet o) | 在列表末尾顺序添加元素,起始索引位置从0开始 |
void add(int index,object o) | 在指定的索引位置添加元素,原索引位置及其后面的元素依次后移 |
int size() | 返回列表中的元素个数 |
object get(int index) | 返回指定索引位置处的元素 |
boolean contains(Object o) | 判断列表中是否存在指定元素 |
boolean remove(Object o) | 从列表中删除元素 |
object remove(int index) | 删除指定位置 |
1.1、ArrayList集合类
ArrayList对数组进行了封装,实现了长度可变的数组,优点在于遍历元素和随机访问效率比较高。
1.2、LinkedList集合类
LinkedList采用链式存储方式,优点在于插入,删除元素效率比较高。LinkedList相比List多出了一些独有的方法,如下所示:
方法名称 | 说明 |
---|---|
void addFist(object o) | 在首部添加元素 |
void addLast(object o) | 在末尾添加元素 |
object getFist() | 返回第一个元素 |
object getLast() | 返回最后一个元素 |
object removeFist() | 移除第一个元素 |
object removeLast() | 移除最后一个元素 |
2、Map接口
Map接口存储一组成对的键-值对象,提供key(键) 到value(值)的映射,Map中的key不要求有序,不允许重复。value同样不要求有序,但允许重复。
常用方法如下:
方法名称 | 说明 |
---|---|
object put(object key,object value) | 以"键-值对"的方式进行存储 注意:键必须是唯一的,值可以重复 |
object get(object key) | 根据键返回值,若不存在指定的键,则返回null |
object remove(object key) | 删除指定的键映射的"键-值对" |
int size() | 返回元素个数 |
Set keySet() | 返回键的集合 |
Collection values() | 返回值的集合 |
boolean containKey(Object key) | 若存在指定的键映射的"键-值对",则返回true |
boolean isEmpty() | 若不存在键-值映射关系,则返回true |
void clear() | 从此映射中移除所有映射关系 |
实现此接口的类有:HashMap集合类、Hashtable集合类等等。。
HashMap集合类和Hashtable集合类的主要区别如下:
- Hashtable是线程安全的,HashMap是线程不安全的,但是速度快。
- Hashtable不允许null值(key和value都不允许),如果存在则运行报错;HashMap允许null值(key和value都允许)。
3、Set接口
Set用于存储无序并且唯一(不允许重复)的值。
操作方法类似于List接口
实现:
1、HashSet:存储的方式类似于数组
2、TreeSet:以树形结构实现存储,实现了SortedSet接口,对元素进行排序,默认从小到大排序
小技巧:可以通过Set给List去重。
三、迭代器Iterator
使用迭代器遍历的步骤:
1、先将list对象转换为Iterator对象
Iterator<数据类型> it = list.iterator();
2、通过Iterator对象的hasNext()方法判断是否存在另一个可访问的元素
3 、通过Iterator对象的next方法返回要访问的下一个元素
如下示例:
//使用迭代器遍历list集合
import java.util.Iterator; //导包
Iterator it = list.iterator();
while(it.hasNext()){
System.out.println(it.next());
}