目录
[Collection 两大分支:List、Set](#Collection 两大分支:List、Set)
[一、add(E e):添加元素](#一、add(E e):添加元素)
[二、remove(Object o):删除元素](#二、remove(Object o):删除元素)
[三、contains(Object o):判断是否包含](#三、contains(Object o):判断是否包含)
前言
集合是Java 提供的一组"容器",专门用来存放多个对象。
数组也能存多个数据,但数组长度固定,添加、删除元素不方便、功能少。而集合更加灵活,集合长度可以自动变化,也提供了大量常用方法。
Java 集合体系主要分两大类:
- Collection:单列集合,一次存一个元素。
- **Map:**双列集合,一次存一对键值对。
Collection集合体系:

Collection(单列集合)
Collection是单列 集合的顶层接口,它里面的方法是全部单列集合(List,Set)都可以继承使用的。
注意:
Collection是一个接口 ,我们不能直接创建他的对象。
所以,现在我们学习他的方法时,只能创建他实现类的对象。(通过多态创建)。
多态:
1.左边是List父( 接口, 抽象规范): 只规定
add()、get()、remove()这些方法名,不写具体实现。2.右边是子类(实现类): 重写了 List 所有方法,底层用数组存数据。
3.父类引用指向子类对象 :
List 引用 = new ArrayList()4.编译看左,运行看右:
编译时 只能调用 List 中定义的方法(add/remove/get),运行时实际执行的是 ArrayList 重写后的方法实现
Collection 两大分支:List、Set
创建集合对象:
java
//数组集合
List<String> list = new ArrayList<>();
//换成链表集合,左边List不变
List<String> list = new LinkedList<>();
Collection接口常用方法:
| 方法名称 | 说明 |
| public booleanadd(E e) | 把给定的对象添加到当前集合中 |
| public voidclear() | 清空集合中所有的元素 |
| public boolean remove(E e) | 把给定的对象在当前集合中删除 |
| public boolean contains(Object obj) | 判断当前集合中是否包含给定的对象 |
| public boolean isEmpty() | 判断当前集合是否为空 |
| public int size() | 返回集合中元素的个数 / 集合的长度 |
|---|
一、add(E e):添加元素
java
Collection<String> c = new ArrayList<>();
boolean result = c.add("张三");
System.out.println(result); // true
- List 添加一般返回 true。
- Set 如果添加重复元素,可能返回 false。
二、remove(Object o):删除元素
java
Collection<String> c = new ArrayList<>();
c.add("张三");
boolean result = c.remove("张三");
System.out.println(result); // true
- 如果元素存在,删除成功,返回 true。
- 如果元素不存在,删除失败,返回 false。
- 如果集合中有多个相同元素,remove 只删除第一个匹配的。
三、contains(Object o):判断是否包含
java
Collection<String> c = new ArrayList<>();
c.add("张三");
System.out.println(c.contains("张三")); // true
注意:
contains 底层依赖 equals() 判断对象是否存在的/一致的。
- list.contains(obj) // 源码逻辑:挨个遍历,调用元素.equals(传入参数)
如果是String,判断是正确的,因为String重写了 equals()。
如果集合中存储的是自定义对象 ,没有重写equals方法,那么默认使用object类中的equals 方法进行判断,而jobject类中equals方法,依赖地址值 进行判断。所以如果要按内容判断,需要在自定义的Javabean类中重写 equals()。
重写也可以使用快捷键自动重写。
java
public class Main {
public static void main(String[] args) {
Collection<Student> c = new ArrayList<>();
c.add(new Student("张三", 18));
System.out.println(c.contains(new Student("张三", 18))); // true
}
}
class Student {
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
// contains 会用 equals 比较对象内容
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Student)) return false;
Student student = (Student) o;
return age == student.age && Objects.equals(name, student.name);
}
}
四、clear():清空集合
java
c.clear();
clear 是清空集合,不是把集合变量变成 null。
五、isEmpty():判断集合是否为空
**isEmpty 判断的是 size() 是否为 0。**它不是判断集合变量是不是 null。
六、size():获取集合长度
- 数组获取长度:arr.length
- 字符串获取长度:str.length()
- 集合获取长度:collection.size()