[TOC]
>[success] # Collection
1. `java.util.Collection`接口是**List**接口、**Queue**接口以及**Set**接口的父接口,因**此该接口里定义的方法既可用于操作List集合,也可用于操作Queue集合和Set集合**
![](https://img.kancloud.cn/0a/5c/0a5c23bf055f7fc7d08b107732f3e26d_1027x393.png)
|方法声明 |功能介绍|
|--|--|
|boolean add(E e); |向集合中添加对象|
|boolean addAll(Collection<? extends E> c)|用于将参数指定集合c中的所有元素添加到当前集合中|
|boolean contains(Object o); |判断是否包含指定对象|
|boolean containsAll(Collection<?> c) |判断是否包含参数指定的所有对象|
|boolean retainAll(Collection<?> c) |保留当前集合中存在且参数集合中存在的所有对象|
|boolean remove(Object o); |从集合中删除对象|
|boolean removeAll(Collection<?> c) |从集合中删除参数指定的所有对象|
|void clear(); |清空集合|
|int size();| 返回包含对象的个数|
|boolean isEmpty(); |判断是否为空|
|boolean equals(Object o)| 判断是否相等|
|int hashCode() |获取当前集合的哈希码值|
|Object[] toArray()| 将集合转换为数组|
|Iterator iterator()| 获取当前集合的迭代器|
* 因为Collection 是 最上级接口 因此 `ArrayList `类也具备接口方法实现,所以下面案例用`ArrayList ` 作为案例使用 接口方法
>[danger] ##### add/ addAll
~~~
import java.util.ArrayList;
import java.util.Collection;
public class CollectionTest {
public static void main(String[] args) {
// Collection c1 = new Collection(); // 接口不能实例化,也就是不能创建对象
// ArrayList 实现了接口 Collection 因此接口类型的引用指向实现类的对象,形成了多态
Collection arr = new ArrayList();
// 自动调用toString方法,调用ArrayList类中的toString方法,默认打印格式为:[元素值1, 元素值2, ...]
// 质上就是打印集合中的每个对象,也就是让每个对象调用对应类的toString方法
System.out.println(arr); // []
// 1. ----- 使用add向集合中添加元素,add 添加需要是 对象类型 ,添加成功后返回布尔类型 ---------------
boolean b1 = false;
arr.add(new String("w"));
arr.add(Integer.valueOf(10));
arr.add(100); // 自动装箱机制 将基本类型变成对象
// arr.add(new Person("name")); // 添加一些自定义类对象
b1 = arr.add("y"); // 保存常量字符串
System.out.println(b1); // true
int[] ls = { 1, 2, 3, 4, 5 };
arr.add(ls);
// Person 想让自定义对象打印格式自定需要重写toString 方法
// 没有重新数组的toString 方法 因此打印出来是数组的内存地址
System.out.println(arr); // [w, 10, 100, y, [I@123772c4]
// 2. -------是用addAll 将一个集合中的值都添加到另一个集合中 --------
Collection arr1 = new ArrayList();
arr1.add("c");
arr1.addAll(arr);
System.out.println(arr1); // [c, w, 10, 100, y, [I@123772c4]
}
}
~~~
>[danger] ##### contains/ containsAll
1. `contains` 原理`Objects.equals(o, e)`,其中**o代表contains方法的形式参数,e代表集合中的每个元素**,对象与集合中已有对象的地址相同 或对象不为空,则对象调用equals方法与集合中已有元素相等(比较的方式调用Objects中的equals方法,自定义对象可以重写equals方法)
~~~
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
~~~
~~~
import java.util.ArrayList;
import java.util.Collection;
public class CollectionTest {
public static void main(String[] args) {
Collection arr = new ArrayList();
arr.add("2");
arr.add(2);
// contains 判断集合中是否包含参数指定的单个元素
boolean b1 = arr.contains("2");
System.out.println(b1); // true
// 判断当前集合中是否包含参数指定集合的所有元素
Collection arr1 = new ArrayList();
arr1.add(2);
// arr["2" , 2] 中的元素是否都存在arr1 [2]中
System.out.println(arr1.containsAll(arr)); // false
// arr1 [ 2] 中的元素是否都存在arr ["2" , 2] 中
System.out.println(arr.containsAll(arr1)); // true
}
}
~~~
>[danger] ##### retainAll -- 交集
1. 计算两个集合的交集并保留到当前集合中,如果生成新的集合返回`true `否则`false`
~~~
import java.util.ArrayList;
import java.util.Collection;
public class CollectionTest {
public static void main(String[] args) {
Collection arr = new ArrayList();
arr.add(1);
Collection arr1 = new ArrayList();
arr1.add(2);
arr1.add(3);
arr1.add(4);
boolean b = arr.retainAll(arr1);
System.out.println(b); // true 没有交集导致arr 被更新为空集合 []
System.out.println(arr); // []
// ------------------------------------
Collection arr2 = new ArrayList();
arr2.add(1);
arr2.add(3);
Collection arr3 = new ArrayList();
arr3.add(2);
arr3.add(3);
arr3.add(4);
b = arr2.retainAll(arr3);
System.out.println(b); // true 没有交集导致arr 被更新为空集合 [3]
System.out.println(arr2); // [3]
b = arr3.retainAll(arr3);
System.out.println(b); // false 自己和自己交集没有值改变
}
}
~~~
>[danger] ##### remove/removeAll
1. remove方法的工作原理:Objects.equals(o, e)
~~~
import java.util.ArrayList;
import java.util.Collection;
public class CollectionTest {
public static void main(String[] args) {
Collection arr = new ArrayList();
arr.add(1);
arr.add(12);
arr.add(122);
// 删除单个元素 remove方法的工作原理:Objects.equals(o, e)
boolean b = arr.remove(1);
// 删除存在返回true
System.out.println("b = " + b); // b = true
System.out.println("arr = " + arr); // arr = [12, 122]
b = arr.remove("one");
// 删除不存在返回false
System.out.println("b = " + b); // false
System.out.println("arr = " + arr); // arr = [12, 122]
Collection arr1 = new ArrayList();
arr1.add(12);
b = arr.removeAll(arr1);
System.out.println("b = " + b); // b = true
System.out.println("arr = " + arr); // arr = [122]
}
}
~~~
>[danger] ##### clear / size /isEmpty /equals
~~~
import java.util.ArrayList;
import java.util.Collection;
public class CollectionTest {
public static void main(String[] args) {
Collection arr = new ArrayList();
arr.add(1);
arr.add(12);
arr.add(122);
// 是否为空
boolean b = arr.isEmpty();
System.out.println(b); // false
// 获取个数
int size = arr.size();
System.out.println(size); // 3
// 清空集合中的所有元素
arr.clear();
b = arr.isEmpty();
System.out.println(b); // true
arr.add(4);
arr.add(5);
Collection arr1 = new ArrayList();
arr1.add(4);
arr1.add(5);
// 两个集合并判断是否相等
b = arr1.equals(arr);
System.out.println(b); // true
}
}
~~~
>[danger] ##### 集合 数组互相转换 -- toArray
1. 通常认为:集合是用于取代数组的结构,因为Object 是所有对象父类因此是**Object 数组类型**
~~~
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
public class CollectionTest {
public static void main(String[] args) {
Collection arr = new ArrayList();
arr.add(1);
arr.add(12);
arr.add(122);
// 实现集合和数组类型之间的转换 通常认为:集合是用于取代数组的结构
// 实现集合向数组类型的转换
Object[] objects = arr.toArray();
System.out.println("数组中的元素有:" + Arrays.toString(objects)); // 数组中的元素有:[1, 12, 122]
// 实现数组类型到集合类型的转换
Collection objects1 = Arrays.asList(objects);
System.out.println("集合中的元素有:" + objects1); // 集合中的元素有:[1, 12, 122]
}
}
~~~
- windows -- 环境变量
- Vscode -- 编写java
- 初始java
- java -- 关键字
- 编写第一个java程序
- java -- 注释
- 计算机存储 -- 进制
- java -- 类型
- java -- 变量
- 数字类型
- 布尔类型
- 字符类型
- 类型转换
- 双等比较是什么
- java -- 运算符
- 算数运算符
- 字符串拼接
- 关系/比较运算符
- 自增减运算符
- 逻辑运算符
- 三目运算
- 赋值运算符
- 移位运算符
- 位运算符
- 运算符优先级
- java -- 流程控制语句
- if /else if /if -- 判断
- switch case分支结构
- for -- 循环
- 用双重for循环
- while -- 循环
- do while -- 循环
- 案例练习
- java -- 数组
- 数组的存储
- 数组的增删改查
- 数组的特点
- 数组案例
- 二维数组
- 数组的工具方法
- java -- 方法
- java -- 方法的重载
- java -- 方法的调用流程
- java -- 类方法传参注意事项
- java -- 方法练习案例
- 对比 return break continue
- for each循环
- java -- 基础练习
- java -- 面向对象
- java -- 创建类和对象
- java -- 访问控制符
- java -- 类成员方法
- java -- 构造方法
- java -- this
- java -- 封装
- java -- 对象内存图
- java -- 创建对象案例
- java -- static
- java -- 继承
- super -- 关键字
- java -- 构造块和静态代码块
- java -- 重写
- java -- final
- java -- 多态
- java -- 抽象类
- java -- 接口
- 引用类型数据转换
- 综合案例
- java -- 内部类
- java -- 回调模式
- java -- 枚举类型
- java -- switch 使用枚举
- java -- 枚举方法使用
- java -- 枚举类实现接口
- java -- javaBean
- java -- package 包
- java -- import
- java -- 递归练习
- java -- 设计模式
- 单例模式
- java -- 注解
- java -- 元注解
- Java -- 核心类库
- java -- 处理字符串
- Java -- String
- String -- 常用方法
- String -- 正则
- Java -- StringBuilder 和 StringBuffer
- 知识点
- Java -- StringJoiner 字符串拼接
- 练习题
- 字符串的总结
- Java -- 包装类
- Integer
- Double
- Boolean
- Character
- java -- 集合类
- java -- util.Collection
- Iterator接口
- java -- util.List
- java -- ArrayList
- java -- util.Queue
- java -- util.Set
- java -- util.Map
- java -- util.Collections
- Java -- Math
- Java -- java.lang
- Java -- Object
- Java -- 获取当前时间戳
- Java -- 异常
- Java -- java.util
- java -- Date
- java -- Calender
- Java -- java.text
- Java -- SimpleDateFormat
- Java -- java.time
- Java -- java.io
- java -- io.File
- java -- 泛型
- IDEA -- 用法