Collection(Java)
List系列集合
添加的元素是有序,可重复,有索引
set系列集合
添加的元素是无序,不重复,无索引
collection是单列集合的顶级**父接口 ** ,它的功能是全部单列集合都可以继承使用的
方法名称 | 说明 |
---|---|
public boolean add(E e) | 把给定的对象添加到当前集合中 |
public void clear() | 清空集合中的所有元素 |
public boolean remove(E e) | 把给定的对象在当前集合中删除 |
public boolean contains(Object obj) | 判断当前集合中是否包含给定的对象 |
public boolean isEmpty() | 判断当前集合是否为空 |
public int size() | 返回集合中元素的个数/集合的长度 |
Collection是一个接口,我们不能直接创建对象
所以需要用到实现类的对象
比如:ArrayList
代码实现
import java.util.ArrayList;
import java.util.Collection;
public class CollectionDemo {
public static void main(String[] args) {
Collection<String> coll = new ArrayList<>();
//添加元素
//细节1:如果要在List系列集合中添加数据,那么方法永远返回true,因为List系列是允许元素重复的
//细节2:如果要在set系列集合中添加数据,如果当前添加的元素不存在,方法返回true。表示添加成功
//但是如果数据元素已经存在,方法但会false,表示数据天津爱失败
coll.add("aaaa");
coll.add("bbbb");
coll.add("cccc");
System.out.println(coll);
// //清除数据
// coll.clear();
// System.out.println(coll);
//删除元素,根据对象删除
//方法会有一个boolean类型的返回值,如果删除成功返回true,如果删除失败(元素不存在)返回false
coll.remove("aaaa");
System.out.println(coll);
//判断元素是否包含
//细节:底层中是依赖equals方法进行判断是否存在的
//所以,如果集合中存储的是自定义对象,也想通过contains方法来判断是否包含,那么在JavaBean类中需要重写equals方法
boolean result1 = coll.contains("aaaa");
boolean result2 = coll.contains("bbbb");
System.out.println(result1);
System.out.println(result2);
//判断集合是否为空
boolean result3 = coll.isEmpty();
System.out.println(result3);
//获取集合长度
int size = coll.size();
System.out.println(size);
//清除数据
coll.clear();
//判断集合是否为空
boolean result4 = coll.isEmpty();
System.out.println(result4);
//获取集合长度
int size1 = coll.size();
System.out.println(size1);
}
}
Collection的遍历方式
迭代器遍历
迭代器不依赖索引
迭代器在java中的类时Iterator
,迭代器是集合专用的遍历方式
Collection集合获取迭代器
方法名称 | 说明 |
---|---|
Iterator<E> iterator | 返回迭代器对象,默认指向当前集合的0索引 |
Iterator中常用方法
方法名称 | 说明 |
---|---|
boolean hasNext() | 判断当前位置是否有元素,有元素返回true,没有元素返回false |
E next() | 获取当前位置的元素,并将迭代器对象移向下一个位置 |
代码演示
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class CollectionDemo {
public static void main(String[] args) {
//创建对象并添加元素
Collection<String> coll = new ArrayList<>();
coll.add("aaa");
coll.add("bbb");
coll.add("ccc");
coll.add("ddd");
coll.add("fff");
//获取迭代器对象
//迭代器就好比是一个箭头,默认指向集合的0索引处
Iterator<String> it= coll.iterator();
//利用循环不断地获取集合中的每一个元素
while (it.hasNext()){
//next方法的两种事情,获取元素并移动指针
String str = it.next();
System.out.println(str);
}
}
}
细节
- 当指针已经指向最后一个元素后面的一个位置,再次调用next()方法获取对象的话会报错NoSuchElementException
- 迭代器遍历完毕,指针不会复位,如果需要重写遍历集合,就需要在再次创建一个迭代器对象
- 循环中只能用一次next()方法
- 迭代器遍历时,不能用集合的方法进行增加或者删除,但是可以用迭代器的remove()方法进行删除
增强for遍历
- 增强for的底层就是迭代器,为了简化迭代器的代码书写
- 它是JDK5以后出现的,其内部原理就是Iterator迭代器
- 所有的单列集合和数组才能用增强for进行遍历
格式
for(a元素的数据类型 变量名:数组或者集合){
}
代码演示
import java.util.ArrayList;
import java.util.Collection;
public class CollectionDemo {
public static void main(String[] args) {
//创建对象并添加元素
Collection<String> coll = new ArrayList<>();
coll.add("aaa");
coll.add("bbb");
coll.add("ccc");
coll.add("ddd");
coll.add("fff");
//增强for进行遍历
//注意点:
//s就是一个第三方变量,在循环的过程中依次表示集合中的每一个数据
for (String s : coll) {
System.out.println(s);
}
}
}
细节
-
修改增强for中的变量,不会改变集合中原本的数据
for (String s : coll) { s = "q"; }
循环结束在输出coll,此时输出结果还是原先的内容
lambda表达式遍历
方法名称 | 说明 |
---|---|
default void forEach(Consumer<? super T> action): | 结合Lambda遍历集合 |
代码展示
import java.util.ArrayList;
import java.util.Collection;
public class CollectionDemo {
public static void main(String[] args) {
//创建对象并添加元素
Collection<String> coll = new ArrayList<>();
coll.add("aaa");
coll.add("bbb");
coll.add("ccc");
coll.add("ddd");
coll.add("fff");
//lambda表达式
coll.forEach(s-> System.out.println(s));
}
}