张小飞的Java之路——第三十章——Collection

文章介绍了Java集合框架的概念,强调其比数组更灵活,可变长度且功能更强大。集合是Java提供的数据存储容器,包括List、Set等,它们有各自不同的数据存储方式。文章以Collection接口为例,详细解释了如add、addAll、clear、remove等常用方法,并讨论了迭代器在遍历集合中的作用,展示了如何通过迭代器高效取出元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面:

视频是什么东西,有看文档精彩吗?

视频是什么东西,有看文档速度快吗?

视频是什么东西,有看文档效率高吗?


1. 介绍

诸小亮:今天开始,我们介绍——集合

张小飞:什么是集合?

诸小亮:集合——是 Java 提供的一种存储数据的容器

张小飞:存储数据的容器,数组和可以存储数据啊,那么它是集合吗?

诸小亮:嗯。。。,数组可以称为集合,但我说的‘集合’功能要远比数组强大

张小飞:哦?能具体说说吗?

诸小亮:之前数据都使用数组存储,但是数组的长度是不可变的,不能灵活的添加、删除元素

张小飞:确实,那么集合能解决这些问题?

诸小亮:是的,Java中提供了的一系列操作对象的类——集合框架,就是为了方便的操作对象数据

张小飞:那我真是要见识一下了,都有哪些类?

诸小亮:来,看下图


张小飞:图上的每一个都会讲吗?

诸小亮:这是当然的

张小飞:能否说说它们跟数据具体有哪些区别?

诸小亮:主要的区别

  • 集合长度可变,数组不可变
  • 集合只能存储对象,数组可以存储对象,也可以存储基本数据类型
  • 集合可以存储不同类型的对象,数据只能存储同一类型
  • 集合提供了更多的方法去操作数据

2. 常用容器

张小飞:学习集合就是学习上面的List、Set等这些类如何使用吗?

诸小亮:是的,它们在 Java 中都是容器,只不过存储数据的方式不同

张小飞:什么叫存储数据的方式不同?

诸小亮:现实中存储物品的方式有很多种,像鸡蛋有一篮一篮的,也有一盒一盒的

张小飞:明白了,存放鸡蛋的篮子、盒子就是容器,但是它们存放鸡蛋的方式不一样

诸小亮:是的,同理 Java 中存储数据的容器也有很多种

  • 集合框架提供好几种容器来存储对象,不同类型的容器对数据的存储和操作方式也不同
  • 学习集合框架,主要就是学习如何使用容器操作数据

张小飞:那,我们先学习哪个容器呢?

1. Collection

诸小亮:集合框架中最顶级的接口是——Collection,它的子类才是一个个具体的容器

张小飞:这么说,Collection 中定义了很多共性的方法吧

诸小亮:是的,我们先看这一些通用的方法,以实现类 ArrayList 为例

1. add

诸小亮:add,添加一个数据,添加成功返回true,添加失败返回false

public static void main(String[] args) throws Exception {
    Collection list = new ArrayList();
    //可以添加不同类型的数据
    boolean bool = list.add(123);//123会自动装箱成Integer
    list.add("456");
    System.out.println(list);
}

结果:image.png

张小飞:不对啊,您之前不是说,集合只能操作对象数据吗,123是基本类型啊

诸小亮:注意看注释,123会自动装箱成 Integer 对象

张小飞:噢~,抱歉抱歉,没看到

诸小亮:另外,也可以通过 debug 查看 list 存储的数据

image.png

2. addAll

诸小亮:addAll,把一个容器中的所有元素添加到指定的容器中

image.png

结果:image.png

张小飞:容器中的数据叫‘元素’?

诸小亮:是的,一般我们都这么称呼

3. clear

clear:清空容器中的元素

image.png

结果:image.png

4. remove

remove:删除指定元素

image.png

结果:image.png

5. removeAll

removeAll(Collection c):删除指定容器中的所有元素

image.png

结果:省略

6. size

size:获取容器的长度

image.png

结果:省略

7. isEmpty

isEmpty:判断容器是否是空的,true:空,false:不空

image.png

结果:image.png

8. contains

contains:是否包含指定元素,true:是,false:否

image.png

结果:image.png

注意:因为存储的都是对象,所以contains底层实际上调用的是元素的 equals 方法

9. containsAll

containsAll:是否包含指定容器中的所有元素,true:是,false:否

image.png

结果:image.png

10. toArray

toArray:把集合转换为数组

image.png

结果:image.png,后面还会详细介绍

11. iterator

iterator:返回迭代器对象,用于从容器中取出元素

public static void main(String[] args) throws Exception {
    Collection list = new ArrayList();
    list.add(123);
    list.add("456");
    Iterator iterator = list.iterator();//返回迭代器对象,用于从容器中取出元素
    while (iterator.hasNext()){//hasNext判断容器还有没有元素, 返回true:表示还有元素
        System.out.println(iterator.next());//next()取出一个元素
    }
}

结果:image.png

但是,在开发中如果要使用迭代器,一般推荐这样写:

for(Iterator it = list.iterator();it.hasNext();){
    System.out.println(it.next());//取出一个元素
}
//目的:for循环结束it变垃圾了,会被自动回收了,节省内存

张小飞:为什么开发中建议用上面的写法?

诸小亮:for循环结束 it 这个对象就变为垃圾了,会被自动回收了,节省内存

张小飞:原来如此

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值