1. 体系概述
- 集合就是存储对象最常用的一种方式
- 数组虽然也可以存储对象,但是长度固定;而集合的长度是可以变化的。数组中可以存储基本数据类型;集合只能存储对象。
- 集合用于存储对象,集合长度是可以变化的,集合可以存储不同类型的对象。
为什么会出现这么多容器呢?
因为每一个容器对数据的存储方式都有不同,这个存储方式称之为:数据结构。
2. 共性方法
常用方法:
添加:add(Object obj), addAll()
删除:remove(), removeAll()
判断:contains(), containsAll(), equals()
取出:iterator()
步骤:
- 导入util包
- 创建一个集合容器,使用Collection接口的子类
注意:
add(Object obj)
方法的参数类型是Object,以便接收任意类型对象- 集合中存储的都是对象的引用(地址)
package collectionDemo;
// 第一步导包
import java.util.*;
public class CollectionDemo {
public static void main(String[] args) {
// 第二步创建一个集合容器,使用Collection接口的子类,ArrayList
ArrayList a1 = new ArrayList();
ArrayList a2 = new ArrayList();
//增、查、删
baseFunction(a1);
sop("...................................................");
otherFunction(a1,a2);
}
public static void baseFunction(ArrayList a1){
//1. 添加元素
a1.add("shh1");
a1.add("shh2");
a1.add("shh3");
a1.add(4);
a1.add(5);
//2. 获取个数,集合长度
sop("size:"+a1.size());
//3. 打印集合
sop("初始化:"+a1);
//4. 判断集合
sop("判断java03是否存在:"+a1.contains("java03"));
sop("判断集合是否为空:"+a1.isEmpty());
//删除元素
a1.remove(2);
sop("删除索引为2的元素:"+a1);
a1.remove("shh1");
sop("删除元素shh1:"+a1);
a1.clear();
sop("清空集合:"+a1);
}
public static void otherFunction(ArrayList a1, ArrayList a2) {
a1.add("shh1");
a1.add("shh2");
a1.add("shh3");
a1.add("shh_gy");
a1.add("gy_shh");
a2.add("gy1");
a2.add("gy2");
a2.add("gy3");
a2.add("shh_gy");
a2.add("gy_shh");
sop("a1:"+a1);
sop("a2:"+a2);
// 取交集
a1.retainAll(a2);
sop("取交集之后的a1:"+a1);
a1.removeAll(a2);
sop("移除a2中的元素之后的a1:"+a1);
}
public static void sop(Object obj){
System.out.println(obj);
}
}
结果:
size:5
初始化:[shh1, shh2, shh3, 4, 5]
判断java03是否存在:false
判断集合是否为空:false
删除索引为2的元素:[shh1, shh2, 4, 5]
删除元素shh1:[shh2, 4, 5]
清空集合:[]
...................................................
a1:[shh1, shh2, shh3, shh_gy, gy_shh]
a2:[gy1, gy2, gy3, shh_gy, gy_shh]
取交集之后的a1:[shh_gy, gy_shh]
移除a2中的元素之后的a1:[]
3 迭代器
什么是迭代器呢?
其实就是集合的取出元素的方式。
Iterator<E> iterator()
:以正确的顺序返回该列表中的元素的迭代器。
Iterator接口里面的常用的方法:
boolean hasNext()
:如果迭代具有更多元素,则返回 true 。E next()
:返回迭代中的下一个元素。
package collectionDemo;
// 第一步导包
import java.util.*;
public class CollectionDemo {
public static void main(String[] args) {
method_get();
}
// 取出元素
public static void method_get(){
ArrayList a1 = new ArrayList();
a1.add("shh1");
a1.add("shh2");
a1.add("shh3");
a1.add(4);
a1.add(5);
// 获取迭代器,用于取出集合中的元素
Iterator it = a1.iterator();
while (it.hasNext()){
sop(it.next());
}
}
public static void sop(Object obj){
System.out.println(obj);
}
}
输出结果:
shh1
shh2
shh3
4
5
- 把取出方式定义在集合的内部,这样取出方式就可以直接访问集合内容的元素
- 那么取出方式就被定义成了内部类。
- 而每一个容器的数据结构不同。 所以取出的动作细节也就不同,但是有共性的内容——判断和取出,那么可以将写共性抽取。
- 那么这些内部类都符合一个规则,该规则是
Iterator
。 - 如何获取集合的取出对象呢?通过一个对外提供一个
iterator()
方法