目录
[1.1 主要方法](#1.1 主要方法)
[1.1.1 添加元素](#1.1.1 添加元素)
[1.1.2 删除元素](#1.1.2 删除元素)
[1.1.3 清空元素](#1.1.3 清空元素)
[1.1.4 判断元素是否存在](#1.1.4 判断元素是否存在)
[1.1.5 判断是否为空](#1.1.5 判断是否为空)
[1.1.6 求取元素个数](#1.1.6 求取元素个数)
[1.2 遍历方法](#1.2 遍历方法)
[1.2.1 迭代器遍历](#1.2.1 迭代器遍历)
[1.2.2 增强for遍历](#1.2.2 增强for遍历)
[1.2.3 Lambda表达式遍历](#1.2.3 Lambda表达式遍历)
[1.2.4 应用场景](#1.2.4 应用场景)
[2.1 新增方法](#2.1 新增方法)
[2.1.1 指定位置添加元素](#2.1.1 指定位置添加元素)
[2.1.2 删除指定位置元素](#2.1.2 删除指定位置元素)
[2.1.3 修改指定位置元素](#2.1.3 修改指定位置元素)
[2.1.4 返回指定位置元素](#2.1.4 返回指定位置元素)
[2.2 遍历方法](#2.2 遍历方法)
[2.2.1 列表迭代器遍历](#2.2.1 列表迭代器遍历)
[2.2.2 普通for遍历](#2.2.2 普通for遍历)
[2.2.3 应用场景](#2.2.3 应用场景)
引言
在Java中,集合框架(Java Collections Framework)是一组设计用来操作对象集合的类和接口。它提供了一种统一的方式来存储和操作对象集合。集合框架主要包括两大类:单列集合(Single-Column Collections)和双列集合(Two-Column Collections,比如Map)。本文将详细讲解单列集合中的两个关键接口:Collection和List。
一、Collection接口
Collection接口是Java单列集合框架的根接口,它定义了一系列用于操作集合的通用方法。所有单列集合类,包括List和
Set,都实现了这个接口。
1.1 主要方法
方法名 | 说明 |
---|---|
boolean add(E e) | 添加元素 |
boolean remove(E e) | 把给定的对象从当前集合中移除 |
void clear() | 清空集合中的元素 |
boolean contains(Object o) | 判断集合中是否存在指定的元素 |
boolean isEmpty() | 判断集合是否为空 |
int size() | 集合的长度,也就是集合中元素的个数 |
1.1.1 添加元素
Collection是一个接口,不能之间创建它的对象,需要创建其实现类的对象来验证其方法。
java
// 1.创建集合
Collection<String> coll = new ArrayList<>();
// 2.添加数据
coll.add("zhangsan");
// 3.打印
System.out.println(coll);
1.1.2 删除元素
java
// 创建集合
Collection<String> coll = new ArrayList<>();
// 添加数据
coll.add("zhangsan");
coll.add("lisi");
coll.add("wangwu");
// 打印
System.out.println(coll);
// 删除元素
coll.remove("lisi");
// 打印
System.out.println(coll);
第二次打印相较于第一次打印会少一个元素:"lisi"。
1.1.3 清空元素
java
// 创建集合
Collection<String> coll = new ArrayList<>();
// 添加数据
coll.add("zhangsan");
coll.add("lisi");
coll.add("wangwu");
// 打印
System.out.println(coll);
// 清空元素
coll.clear();
// 打印
System.out.println(coll);
第一次打印:[zhangsan, lisi, wangwu]。
第二次打印:[]。
1.1.4 判断元素是否存在
代码紧接上文:
java
// 判断zhangsan这个元素在集合中是否存在
System.out.println(coll.contains("zhangsan"));
注意:集合中contains()方法底层是依赖equals()方法判断是否存在;因此如果集合中存储的是自定义类,一定要重写equals()方法之后contains()方法才能正确判断元素是否存在
1.1.5 判断是否为空
代码紧接上文:
java
//判断集合中是否为空
System.out.println(coll.isEmpty()); //false
1.1.6 求取元素个数
代码紧接上文:
java
//求取集合中的元素个数
System.out.println(coll.size());
1.2 遍历方法
1.2.1 迭代器遍历
遍历格式:
java
Iterator<E> it = 集合名称.iterator();
while(it.hasNext()){
集合元素类型 变量名 = it.next();
System.out.println(变量名);
}
注意:
①循环中不能使用集合的添加或删除方法(可以使用迭代器的删除方法)
②循环只用一次next()方法(使用多次可能会导致NoSuchElementException的异常)
1.2.2 增强for遍历
JDK5以后出现,其内部原理就是一个Iterator迭代器。
遍历格式:
java
for(数据类型 变量名 : 集合/数组){
}
注意:
①单列集合以及数组才能用增强for循环
②在增强for循环中修改其变量的值,不会改变集合中原来的数据
1.2.3 Lambda表达式遍历
JDK8以后出现,使用foreach方法。
遍历格式:
java
集合名称.forEach((参数) -> {
//方法体
}
);
1.2.4 应用场景
迭代器遍历:在遍历过程需要删除元素
增强for遍历:仅仅想遍历
Lambda表达式遍历:仅仅想遍历
二、List接口
List接口是Collection接口的一个子接口,它继承并扩展了Collection接口的所有方法。List集合是有序的集合,允许存储重复的元素,并且可以通过索引访问元素。
2.1 新增方法
方法名 | 说明 |
---|---|
void add(int index,E element) | 在此集合中的指定位置插入指定的元素 |
E remove(int index) | 删除指定索引处的元素,返回被删除的元素 |
E set(int index,E element) | 修改指定索引处的元素,返回被修改的元素 |
E get(int index) | 返回指定索引处的元素 |
2.1.1 指定位置添加元素
java
// 创建集合
List<String> list = new ArrayList<>();
// 添加数据
list.add("zhangsan");
list.add("lisi");
list.add("wangwu");
// 打印
System.out.println(list);
// 指定位置添加元素
list.add(0, "laoliu");
// 打印
System.out.println(list);
在此集合中的指定位置插入指定的元素,原来位置上的元素往后挪一个索引。
2.1.2 删除指定位置元素
代码紧接上文:
java
//删除索引位置为0的元素
String s = list.remove(0);
注意:在调用方法时,如果方法出现重载,优先调用++实参与形参类型一致++的方法
2.1.3 修改指定位置元素
代码紧接上文:
java
String result = list.set(0, "abc");
System.out.println(result);
System.out.println(list);
修改指定索引处的元素,返回被修改的元素;被替换的那个元素,在集合中就不存在了。
2.1.4 返回指定位置元素
代码紧接上文:
java
//返回索引为0的元素
String s = list.get(0);
System.out.println(s);
2.2 遍历方法
相较与Collection接口,List接口多了两种遍历方法。
2.2.1 列表迭代器遍历
遍历格式:
java
ListIterator<E> it = 集合名称.ListIterator();
while(it.hasNext()){
集合元素类型 变量名 = it.next();
System.out.println(变量名);
}
注:与迭代器遍历相比,在遍历的过程中可以添加元素
2.2.2 普通for遍历
size方法跟get方法还有循环结合的方式,利用索引获取到集合中的每一个元素
java
for (int i = 0; i < list.size(); i++) {
//i:依次表示集合中的每一个索引
String s = list.get(i);
System.out.println(s);
}
2.2.3 应用场景
迭代器遍历:在遍历过程中需要删除元素
列表迭代器:在遍历过程中需要添加或删除元素
增强for遍历:仅仅只是遍历
Lambda表达式遍历:仅仅只是遍历
普通for遍历: 在遍历过程中需要操作索引
结语
Collection接口是Java集合框架的根接口,提供了基本的集合操作。
List接口是Collection的子接口,支持基于索引的操作,允许存储重复元素,并且是有序的。