1.集合
1.1为什么要有集合?
集合和数组都是可以存数据的,真实开发的时候用的是集合而不是数组
为啥?
①数组的容量是固定的。
②数组封装的方法比较少。
Java给咱们封装了集合类库,只需要实例化出来一个对象,使用对象调用方法即可完成数据相关的操作。
1.2集合结构
Interface Collection<E> Java 中集合的总接口
① List<E> Colletion的子接口,特征: 存放数据是有序的,可以重复
ArrayList<E> List的实现类,里面写好了List接口所有的抽象方法都已经实现好了,功能写好 底层是数组
LinkedList<E> List的实现类, 里面有自己独有的方法 底层是链表
②Set<E> Collection的子接口, 特征: 存放数据是无序的,不可重复
HashSet<E> Set的实现类 底层是Hash算法
TreeSet<E> Set的实现类 底层是二叉树
1.3Collection接口【开发不用】
学习Collection接口就在学习它下面的方法
Collection下面的方法:
增:
boolean add(E e); 添加数据的
boolean addAll(Collection<? extends E> c); 将一个集合添加到另外的一个集合中
删:
boolean remove(Object obj); 删除指定的元素
boolean removeAll(Collection<?> c)删除指定集合中包含的所有此集合的元素(可选操作)
void clear(); 清空集合中所有的元素
查:
int size(); 集合中元素的个数
Object[] toArray();将集合转为数组
boolean contains(Object obj);在集合中是否包含一个obj元素
boolean containsAll(Collection<? extends E> c); 判断一个集合是否是另外一个结合的子集合
boolean isEmpty(); 判断一个集合是否为空
import java.util.ArrayList;
import java.util.Collection;
public class Demo1 {
public static void main(String[] args) {
//父类的引用指向了子类的对象,意味着 对象只能调用父类的方法
//对象不能调用子类独有的方法 只能调用重写的方法
//Collection 所有的抽象方法都被ArrayList 重写了
Collection<String> collection = new ArrayList<String>();//容器 只能放String类型的数据
collection.add("红旗渠");
collection.add("散花");
collection.add("黄鹤楼");
System.out.println(collection);//[红旗渠, 散花, 黄鹤楼]
Collection<String> collection1 = new ArrayList<String>();//容器 只能放String类型的数据
collection1.add("舍得");
collection1.add("茅台");
collection1.add("牛栏山");
System.out.println(collection1);
collection.addAll(collection1);//将collection1这个集合添加到collection中
System.out.println(collection);//[红旗渠, 散花, 黄鹤楼, 舍得, 茅台, 牛栏山]
// Collection<Integer> collection2 = new ArrayList<Integer>();//容器 只能放String类型的数据
// collection2.add(1);
// collection2.add(2);
// collection2.add(3);
//
// collection.addAll(collection2);
System.out.println(collection.remove("舍得"));//删除指定的数据
System.out.println(collection);//删除之后的结果
//[红旗渠, 散花, 黄鹤楼, 茅台, 牛栏山]
//System.out.println(collection.remove("舍得"));
Collection<String> collection3 = new ArrayList<String>();//容器 只能放String类型的数据
collection3.add("舍得");
collection3.add("茅台");
collection3.add("牛栏山");
collection3.add("红花郎");
System.out.println(collection3);//[舍得, 茅台, 牛栏山, 红花郎]
collection.removeAll(collection3);//删除指定集合中包含的所有此集合的元素
//在collection 删除collection3 中包含的元素
System.out.println(collection);//[红旗渠, 散花, 黄鹤楼]
collection.clear();
System.out.println(collection);//[]
}
}
1.4遍历集合中的数据
①使用for循环
②使用增强for循环【重点】
③使用迭代器【重点】
1.4.1使用for循环遍历集合数据
import java.util.ArrayList;
import java.util.Collection;
public class Demo2 {
public static void main(String[] args) {
Collection<Character> list = new ArrayList<Character>();
list.add('a');
list.add('b');
list.add('c');
System.out.println(list);//[a, b, c]
//for循环遍历
//将集合转为数组 然后再遍历
Object[] objs = list.toArray();
for (int i = 0; i < objs.length; i++) {
System.out.println(objs[i]);
}
}
}
1.4.2使用增强for循环
语法格式:
for (集合或者数组的元素的数据类型 临时变量名字 : 集合或者数组) {
}
import java.util.ArrayList;
import java.util.Collection;
public class Demo3 {
public static void main(String[] args) {
Collection<String> liStrings = new ArrayList<String>();
liStrings.add("张三");
liStrings.add("狗蛋");
liStrings.add("老邢");
System.out.println(liStrings);
//使用增强for循环遍历数据
for (String s : liStrings) {
System.out.println(s);
}
}
}
1.4.3使用迭代器【重点】
也是对集合进行遍历的一种方式
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class Demo4 {
public static void main(String[] args) {
Collection<String> liSt