【Java】Collection

一、综述

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

它的其中一个实现类就是 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

由于 Collection 是接口,里面的方法是抽象方法,因此如果我需要看具体的方法体,选中 contains ——> Go To ——> Implmentation(s),即实现类。

image-20240425185205956

然后 IDEA 就会展示所有的实现类,由于我们刚刚创建的是 ArrayList 的对象,所以点击 ArrayList 就行了。

image-20240425185347212

此时它跳到的就是 ArrayListcontains() 方法

image-20240425185454069

contains() 在底层调用的是 indexOf() 的方法, indexOf() 就是找当前对象在集合中的索引。

这个方法中又调用了 indexOfRange() ,这个方法其实也是判断对象在集合中的索引,只不过它额外的又去加了个范围而已。

image-20240425185600580

在这个代码中,我想要你看的是 else 中的这一段,用for循环从头到尾挨个遍历。

i 就是集合中的每一个索引,通过索引就可以获取到集合中的每一个元素,然后拿着对象 o 去调用 equals() 跟集合中的每一个元素进行比较。

image-20240425185703219

因此,contains() 的底层是依赖。所以,如果集合中存储的是自定义对象,例如 StudentTeacherGirlFriend ,也想通过 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

那字符串在底层是怎么比的呢?

它在底层使用的也是依赖 equals() 进行判断的,只不过在字符串里面,Java已经重写好了 equals(),不用我们自己再管了,因此我们直接拿过来用就行了。


5)判断当前集合是否为空

public boolean isEmpty()
boolean result2 = coll.isEmpty();
System.out.println(result2); // false

方法的底层其实也非常简单,一起来看下源码。

image-20240425191811711

找到 ArrayList 点击它。

image-20240425191850875

此时就很明了了,在底层,它就是判断集合的长度是否为 0

image-20240425191930857

6)返回集合中元素的个数,也就是集合的长度

public int size()
coll.add("ddd");
int size = coll.size();
System.out.println(size); // 3
  • 22
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值