一. 为什么需要集合
数组:①长度在创建时需要定义, 且固定不可变
②保存的内容必须是同一类型的元素
③使用数组进行增加和删除元素比较困难
集合:①可以动态存储任意多个对象, 使用方便
②Java提供了一系列方便操作对象的方法: add, remove, set, get(增删改查)等
③使用集合对内容的添加, 删除元素更方便
二.集合的基本框架
1.基本介绍
①分为两类: 单列集合, 双列集合
②Collection接口下有两个重要的子接口List, Set, 均属于单列集合
③Map接口的实现子类是双列集合, 按照K-V的方式进行存放
2.框架示意:
三.Collection接口和常用方法
Collection类型和继承关系:
源码: public interface Collection <E> extends Iterable<E>
1.介绍
①Collection实现子类可以存放多个元素, 每个元素可以是 Object 类型, 即任意类型
②有些 Collection 的实现子类, 可以存放重复的元素, 有些不能存放重复元素
③有些 Collection 的实现子类, 元素存入后是有序的, 有些是无序, 这列的顺序指的是是否与存放的顺序一致
④Collection 接口没有直接的实现子类, 通过他的子接口 Set 和 List 来实现
2.常用方法
①add 添加单个元素
②remove 删除指定元素
③contains 查找元素是否存在
④size 获取元素个数
⑤isEmpty 判断集合是否为空
⑥clear 清空集合
⑦addAll 添加多个元素
⑧contains 查找多个元素是否都存在
⑨remove 删除多个元素
3.元素遍历方法
①迭代器遍历(Iterator: 迭代器)
a.Iterator 对象称之为迭代器, 主要用于遍历 Collection 集合中的元素
b.所有实现了 Collection 接口的集合都有一个 iterator() 方法, 用于返回 Iterable接口的对象
c.Iterator 仅仅用来遍历集合
b.在使用一次迭代器后, 若想再次使用, 需要将此迭代器重置
代码示例:
Iterator iterator = collection.iterator();// 得到一个集合的迭代器
while(iterator.hasNext()){ // 判断是否有下一个元素
Object obj = iterator.next();// 获取下一个元素
}
②增强for循环遍历
a.增强for循环就是iterator的简化版, 通过debug我们会发现和通过迭代器经过的流程相同
b.与迭代器本质一样, 仅用于遍历集合或数组
c.基本语法
for(元素类型 元素名 : 集合名或数组名){
访问元素;
}
以List接口下ArrayList类为例, 对上述内容进行
代码演示:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
@SuppressWarnings({"all"})
public class CSDN {
public static void main(String[] args) {
List strings = new ArrayList<>();
strings.add("abc");// 向末尾添加元素, 若装满了, 会自动扩容
strings.add("a");
strings.add("b");
strings.add("b");
strings.add("c");
strings.add("d");
strings.add("e");
System.out.println("添加元素: " + strings);
strings.remove("b");// 根据元素内容删除匹配的数据, 只删除第一个
System.out.println("删除元素: " + strings);
System.out.println("元素是否存在: " + strings.contains("a"));// 判断是否存在指定元素
System.out.println("集合是否为空: " + strings.isEmpty());// 判断列表是否为空, 若为空返回true, 反之返回false
strings.set(1, "A");// 替换指定索引的元素
System.out.println("替换元素: " + strings);
System.out.println("集合中元素个数: " + strings.size());// 获得集合中实际元素的个数, 也可以是集合的长度
// 使用迭代器进行遍历, 迭代器1
Iterator<String> iterator = strings.iterator();
System.out.println("===迭代器遍历===");
while (iterator.hasNext()) {
String s = (String) iterator.next();// 强制类型转换, 将Object类型的数据转换为String类型
System.out.print(s + "\t");
}
System.out.println("\n===迭代器遍历结束===");
System.out.println("===增强for循环遍历===");
for (Object string : strings) {
String s = (String) string;
System.out.print(s + "\t");
}
System.out.println("\n===增强for循环内遍历结束===");
}
}
运行结果: