Collection接口
Collection也称集合,集合概述:
集合是Java中提供的一种容器,可以用来存储多个数据。
集合与数组的区别:
- 数组的长度是固定的,集合的长度是可变的。
- 数组中存储的是同一种类型的元素,可以存储基本数据类型值,集合存储的都是对象。而且对象的类型可以不一致。
集合体系的详解
Collection接口可以分出两个常用子接口,List接口和Set接口,更细分的如图。
Collection常用方法
Collection是所有单列集合的父接口,因此在Collection中定义单列集合(List和Set)通用的一些方法,
这些方法可以用于所有的单列集合。
- public boolean add(E e): 把给定的对象添加到当前集合中
- public void clear(): 清空集合中所有的元素
- public boolean remove(E e):把给定的对象在当前集合中删除
- public boolean contains(E e):判断当前集合是否包含给定对象
- public boolean isEmpty(): 判断当前集合是否为空
- public int size():返回集合中元素的个数
- public Object[] toArray():把集合中的元素,存储到数组中
public class Demo01 {
public static void main(String[] args) {
Collection<String> demo = new ArrayList<>();
demo.add("小李");
demo.add("小王");
demo.add("小张");
System.out.println(demo);//说明重写了toString方法
boolean re = demo.remove("小张");//移除一个元素
System.out.println(demo);
System.out.println(re);//判断移除操作是否成功true
boolean con = demo.contains("小王");//判断小王,是否是demo对象中的元素
System.out.println(con);//true
boolean empty = demo.isEmpty();//判断是不是空
System.out.println(empty);//false
int size = demo.size();
System.out.println(size);//输出长度
Object[] arr = demo.toArray();//转化成为数组
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
demo.clear();//清空
System.out.println(demo);
}
}
迭代器概述
**迭代:**即Collection集合元素的通用获取方式。(遍历)在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续再判断,如果还有就再取出来。一直把集合中所有元素全部取出。
java.util.Iterator接口:迭代器(对集合遍历)
有两个常用方法
-
boolean hasNext() 如果仍有元素可以迭代,则返回true
-
判断集合中还有没有下一个元素,有就返回true,没有返回false
-
E next() 返回迭代的下一个元素
-
取出集合的下一个元素
Iterator迭代器,是一个接口,我们无法直接使用,需要使用Iterator接口的实现类对象,获取实现类的方式比较特殊
Collection接口中有一个方法,叫iterator(),这个方法返回的就是迭代器的实现对象。
-
Iterator<E> iterator() 返回再此collection的元素上进行迭代的迭代器。
迭代器的使用步骤:
- 1.使用集合中的方法iterator()获取迭代器的实现类对象,使用Iterator接口接收(多态)
- 2.使用Iterator接口中的方法hasNext判断还有没有下一个元素
- 3.使用Iterator接口中的方法next取出集合中的下一个元素。
public class Demo01 {
public static void main(String[] args) {
//创建集合
Collection<String> coll = new ArrayList<>();
coll.add("一年级");
coll.add("二年级");
coll.add("三年级");
coll.add("四年级");
coll.add("五年级");
/*使用集合中的方法iterator()获取迭代器的实现类对象,使用Iterator接口接收(多态)
* 注意:
* Iterator<E>接口也是有泛型的,迭代器的泛型跟着集合走,集合是什么泛型,迭代器就是什么泛型*/
//多态 接口 实现类对象
Iterator<String> it = coll.iterator();
/*
* 发现使用迭代器取出集合中元素的代码,是一个重复的过程
* 所以我们可以使用循环优化
* 不知道集合中有多少元素,使用while循环
* 循环结束的条件,hasNext方法返回false*/
//遍历集合
while (it.hasNext()){
String a = it.next();
System.out.println(a);
}
}
}
增强For循环
增强for循环(for each)是JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合的。它内部的原理就是一个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作。
- 格式:
-
for(集合或数组的数据类型 变量名 : Collection集合或数组){
-
//操作代码
- }
- 通常只遍历元素,不在这过程中进行元素的增删操作
public class Demo02ForEach {
public static void main(String[] args) {
demo02();
}
private static void demo02() {
//对集合进行遍历
ArrayList<String> a = new ArrayList<>();
a.add("AAA");
a.add("bbb");
a.add("ccc");
a.add("dd");
for (String b : a ) {
System.out.println(b);
}
}
private static void demo01() {
//对数组进行遍历
int[] arr = {1,2,3,4,5};
for (int i: arr) {
System.out.println(i);
}
}
}