1. Collection
1.1 数组和集合的区别
- 相同点
都是容器,可以存储多个数据。 - 不同点
数组的长度是不可变的,集合的长度是可变的。
数组可以存储基本数据类型和引用数据类型,集合只能存储引用数据类型,如果要存基本数据类型,需要存基本类型所对应的包装类。
1.2 集合类的体系结构
1.3 Collection集合概述和使用
- Collection集合概述
是单列集合的顶层接口,他表示一组对象(Collection元素)
JDK不提供此接口的任何直接实现,它提供了更具体的子接口(如Set和List)实现 - 创建Collection集合的对象
多态的方式
具体的实现类ArrayList - 方法介绍
方法名 | 说明 |
---|---|
boolean add(E e) | 添加元素 |
boolean remove(Object o) | boolean remove(Object o) |
boolean removeIf(Object o) | 根据条件进行移除 |
void clear() | 清空集合中的元素 |
boolean contains(Object o) | 判断集合中是否存在指定的元素 |
boolean isEmpty() | 判断集合是否为空 |
int size() | 集合的长度,也就是集合中元素的个数 |
- 代码演示
public static void main(String[] args) {
Collection<String> collection = new ArrayList<>();
collection.add("四大发明");
collection.add("造纸术");
collection.add("印刷术");
collection.add("火药");
collection.add("指南针");
method1(collection);
method2(collection);
method3(collection);
method4(collection);
method5(collection);
method6(collection);
}
private static void method6(Collection<String> collection) {
int size = collection.size();
System.out.println(size);//5
}
private static void method5(Collection<String> collection) {
collection.clear();
boolean empty = collection.isEmpty();
System.out.println(empty);//true
}
private static void method4(Collection<String> collection) {
boolean hy = collection.contains("火药");//true
boolean hy1 = collection.contains("火药1");//false
System.out.println(hy);
System.out.println(hy1);
}
private static void method3(Collection<String> collection) {
collection.clear();
System.out.println(collection);
}
private static void method2(Collection<String> collection) {
// method1(collection);
// boolean test(T t);
collection.removeIf((s) -> s.length() == 3);
System.out.println(collection);
}
private static void method1(Collection<String> collection) {
//删除成功返回true
boolean remove = collection.remove("四大发明");
//删除失败返回false
boolean remove1 = collection.remove("四大发明");
System.out.println(remove);//true
System.out.println(remove1);//false
System.out.println(collection);//[造纸术, 印刷术, 火药, 指南针]
}
1.4 Collection集合的遍历
- 什么是迭代器?
集合专用的遍历方式。
Iterator iterator(): 返回此集合中元素的迭代器,通过集合对象的iterator()方法得到。 - Iterator中的常用方法
boolean hasNext(): 判断当前位置是否有元素可以被取出
E next(): 获取当前位置的元素,将迭代器对象移到下一个索引的位置。 - Collection集合的遍历
public static void main(String[] args) {
Collection<String> list = new ArrayList<>();
list.add("四大发明");
list.add("造纸术");
list.add("印刷术");
list.add("火药");
list.add("指南针");
//1.获取迭代器对象
//迭代器对象一旦被创建出来,默认指向集合的0索引位置
Iterator<String> iterator = list.iterator();
//迭代器相关方法
// 判断当前位置是否有元素
// System.out.println(iterator.hasNext());// true
// 取出当前位置的元素,并且指针后移一位
// System.out.println(iterator.next());
// System.out.println(iterator.next());
// System.out.println(iterator.next());
// System.out.println(iterator.next());
// System.out.println(iterator.next());
// System.out.println(iterator.next());//NoSuchElementException
System.out.println("---------------");
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
- 迭代器原理
- 删除集合中的元素,对List集合介绍中删除集合中元素的代码进行改进
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("四大发明");
list.add("造纸术");
list.add("造纸术");
list.add("印刷术");
list.add("火药");
list.add("指南针");
Iterator it = list.iterator();
while(it.hasNext()) {
String s = (String) it.next();
if ("造纸术".equals(s)) {
it.remove();
}
}
System.out.println(list);
}
1.5 增强for循环
- 介绍
它是JDK5之后出现的,其内部原理是一个Iterator迭代器
实现Iterable接口的类才可以使用迭代器和增强for
简化数组和Collection集合的遍历 - 格式
for(集合/数组中元素的数据类型 变量名:集合/数组名){
} - 代码演示
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("四大发明");
list.add("造纸术");
list.add("印刷术");
list.add("火药");
list.add("指南针");
for (String s : list) {
s = "---";//修改第三方变量的值,不会影响到集合中的元素
System.out.println(s);
}
System.out.println(list);//[四大发明, 造纸术, 印刷术, 火药, 指南针]
}
1.6 小结
三种循环的使用场景:
- 如果需要操作索引,使用普通for循环
- 如果在遍历的过程中需要删除元素请使用迭代器
- 如果仅仅想遍历,那么使用增强for
小练习:
public static void main(String[] args) {
ArrayList<Person> list = new ArrayList<>();
Person s1 = new Person("四大美女",0000);
Person s2 = new Person("西施",0.0);
Person s3 = new Person("貂蝉",0.0);
Person s4 = new Person("王昭君",33);
Person s5 = new Person("赵玉环",37);
list.add(s1);
list.add(s2);
list.add(s3);
list.add(s4);
list.add(s5);
Iterator<Person> it = list.iterator();
while (it.hasNext()) {
Person next = it.next();
System.out.println(next);
}
}
内容有点基础,如果本文对您的学习有用处的话,就请点个赞支持一下把!