文章目录
一、综述
Collection
是单列集合的祖宗接口,它的功能是全部单列集合都可以继承使用的,因此它里面是一些共性的方法。
常见的方法会有以下几个
方法名 | 说明 |
---|---|
public boolean add(E e) | 把给定的对象添加到当前集合中 |
public void clear() | 清空集合中所有的元素 |
public boolean remove(E e) | 把给定的对象进行删除 |
public boolean contains(Object obj) | 判断当前集合中是否包含给定的对象 |
public boolean isEmpty() | 判断当前集合是否为空 |
public int size() | 返回集合中元素的个数,也就是集合的长度 |
二、代码演示
PS:Collection
是一个接口,我们不能直接创建它的对象。所以,现在我们学习它的方法时,只能创建它实现类的对象。
![image-20240425174540065](https://img-blog.csdnimg.cn/img_convert/503f5152d5547ed6a040c029853b20c9.png)
它的其中一个实现类就是 ArrayList
。
使用多态的方式创建对象,这种方式创建对象的目的:为了学习 Collection接口
里面的方法。
自己在做一些练习的时候,还是按照之前的方式去创建对象。
Collection<String> coll = new ArrayList<>();
1)把给定的对象添加到当前集合中
public boolean add(E e)
添加的方法有个 boolean类型
的返回值。
1、如果我们要往 List系列集合
中添加数据,那么方法永远返回true,因为List系列的是允许元素重复的。
2、如果我们要往 Set系列集合
中添加数据,如果当前要添加元素不存在,方法返回 true
,表示添加成功;如果当前要添加的元素已经存在,方法返回 false
,表示添加失败,因为Set系列的集合不允许重复。
coll.add("aaa");
coll.add("bbb");
coll.add("ccc");
System.out.println(coll); // [aaa, bbb, ccc]
2)清空集合中所有的元素
方法一旦执行后,集合中的元素就会全部没有了
public void clear()
代码示例
coll.clear(); // []
3)把给定的对象进行删除
1、这个方法是根据 元素的对象
进行删除的,在这里不能通过索引删除,在 Collection
中定义的是共性的方法,而 Set系列
是没有索引的。
2、方法会有一个布尔类型的返回值,删除成功返回true
,删除失败返回false
。
如果要删除的元素不存在,就会删除失败;如果要删除的元素存在,就会删除成功
public boolean remove(E e)
代码示例
System.out.println(coll.remove("aaa"));
System.out.println(coll); // [bbb, ccc]
4)判断当前集合中是否包含给定的对象
public boolean contains(Object obj)
代码示例
boolean result1 = coll.contains("bbb");
System.out.println(result1); // true
contains()
方法在底层也有一个小细节,我们来看下源码。
选中 contains()
ctrl + b 跟进。我们直接点进去,可以看见,它是直接跳转到 Collection类
中。
![image-20240425175803172](https://img-blog.csdnimg.cn/img_convert/5b72fdef2d9ffb7213ea03b273fccde1.png)
由于 Collection
是接口,里面的方法是抽象方法,因此如果我需要看具体的方法体,选中 contains
——> Go To
——> Implmentation(s)
,即实现类。
![image-20240425185205956](https://img-blog.csdnimg.cn/img_convert/321470b1b0a27d44d7b8a5f858842a8b.png)
然后 IDEA 就会展示所有的实现类,由于我们刚刚创建的是 ArrayList
的对象,所以点击 ArrayList
就行了。
![image-20240425185347212](https://img-blog.csdnimg.cn/img_convert/ad5bd381f7d711ecdc50d33c37e63e28.png)
此时它跳到的就是 ArrayList
的 contains()
方法
![image-20240425185454069](https://img-blog.csdnimg.cn/img_convert/ec66c87fac4ecefb1d1eef531415f97c.png)
contains()
在底层调用的是 indexOf()
的方法, indexOf()
就是找当前对象在集合中的索引。
这个方法中又调用了 indexOfRange()
,这个方法其实也是判断对象在集合中的索引,只不过它额外的又去加了个范围而已。
![image-20240425185600580](https://img-blog.csdnimg.cn/img_convert/ce9fe1f7cc102e6b4f0be2ad5ed5a932.png)
在这个代码中,我想要你看的是 else 中的这一段,用for循环从头到尾挨个遍历。
i
就是集合中的每一个索引,通过索引就可以获取到集合中的每一个元素,然后拿着对象 o
去调用 equals()
跟集合中的每一个元素进行比较。
![image-20240425185703219](https://img-blog.csdnimg.cn/img_convert/c58bc8c778121d1fabee93a7df1df907.png)
因此,contains()
的底层是依赖。所以,如果集合中存储的是自定义对象,例如 Student
、Teacher
、GirlFriend
,也想通过 contains()
判断是否包含,那么在JavaBean类中,一定要重写 equals()
,下面我们来举个例子。
public class A02_CollectionDemo2 {
public static void main(String[] args) {
//1.创建集合的对象
Collection<Student> coll = new ArrayList<>();
//2.创建三个学生对象
Student s1 = new Student("zhangsan",23);
Student s2 = new Student("lisi",24);
Student s3 = new Student("wangwu",25);
//3.把学生对象添加到集合当中
coll.add(s1);
coll.add(s2);
coll.add(s3);
//4.判断集合中某一个学生对象是否包含
Student s4 = new Student("zhangsan",23);
//因为contains方法在底层依赖equals方法判断对象是否一致的。
//如果存的是自定义对象,没有重写equals方法,那么默认使用Object类中的equals方法进行判断,而Object类中equals方法,是依赖地址值进行判断的。
// 但是地址值对我来讲没有用,我想要看到的是属性值
//需求:如果同姓名和同年龄,就认为是同一个学生。
//所以,需要在自定义的Javabean类中,重写equals方法就可以了。
System.out.println(coll.contains(s4));
}
}
alt + insert 重写 equals()
![image-20240425191050651](https://img-blog.csdnimg.cn/img_convert/42c858abedb12c862dfa9adc618a1fd3.png)
那字符串在底层是怎么比的呢?
它在底层使用的也是依赖 equals()
进行判断的,只不过在字符串里面,Java已经重写好了 equals()
,不用我们自己再管了,因此我们直接拿过来用就行了。
5)判断当前集合是否为空
public boolean isEmpty()
boolean result2 = coll.isEmpty();
System.out.println(result2); // false
方法的底层其实也非常简单,一起来看下源码。
![image-20240425191811711](https://img-blog.csdnimg.cn/img_convert/00476e978b4ba51fb059e7ecbc73b5a8.png)
找到 ArrayList
点击它。
![image-20240425191850875](https://img-blog.csdnimg.cn/img_convert/71f6c86e70ba927bca735f0a185816d1.png)
此时就很明了了,在底层,它就是判断集合的长度是否为 0
。
![image-20240425191930857](https://img-blog.csdnimg.cn/img_convert/a6ccc72c80d26cc0c5569cf44cef532b.png)
6)返回集合中元素的个数,也就是集合的长度
public int size()
coll.add("ddd");
int size = coll.size();
System.out.println(size); // 3