1.Collection集合
我们现在先来思考一个问题:如果我现在想同时存储多个元素,我们该如何?那我们用之前学习过的知识点,我们是不是知道数组可以干这件事情,集合是不是也同样的可以干这件事情啊,我们学习一下数组和集合的区别:我们定义一个长度为3的数组,那么现在我有4个元素要往里面存,前3个元素没有任何问题,第四个元素是不是就尴尬了呀,那为什么第四个元素会尴尬呀,其实就是数组的特点导致的,因为数组的长度是不可变的,那我换成集合,我这里还是换成长度为3的集合,还是要来存储4个元素,前面3个元素还是没有任何问题,那此时集合看到了,还有第四个元素没有进来呀,那么它就会自动的扩容,那么集合的这个长度就会自动的从3扩容到4,那么这个自动扩容的代码不需要我们自己去写,我们只需写将元素添加到集合的代码就可以了,所以这也是集合最大的特点,长度可变
那除此之外呢,集合和数组啊,在存储元素的时候还有第二个特点,我们在idea中来演示一下这个特点:我们分别用数组和集合来存储一些元素,存储基本数据类型和引用数据类型,
我们可以通过上述这个代码可以得出一个结论:数组可以存基本数据类型和引用数据类型
我们可以通过上述这个代码可以得出一个结论:集合只能存引用数据类型,如果要存基本数据类型,需要存对应的包装类
也就是我们集合中的泛型里不能写int,要写也只能写int类型的包装类integer
1.1数组和集合的区别【理解】
-
相同点
都是容器,可以存储多个数据
-
不同点
-
数组的长度是不可变的,集合的长度是可变的
-
数组可以存基本数据类型和引用数据类型
集合只能存引用数据类型,如果要存基本数据类型,需要存对应的包装类
-
1.2集合类体系结构【理解】
在java中,集合是有很多分类的,我们看一下体系结构,如果我们一次要来存一个元素,比如说张三一个元素,李四一个元素,王五一个元素,那么我们要使用的就是单列集合,单列集合它的顶层接口是collection,如果我一次要存一对元素,比如说张三和北京,这是不是一对呀,还有李四和上海,王五和南京,那么我们要使用的就是双列集合,双列集合的顶层接口是map,单列和双列是集合中的两大派系,我们先来学习单列,假设我现在要存的元素变了,我现在要存张三,李四,张三,那你会发现这3个元素当中是不是存在重复元素了呀,好,如果说你想保留重复元素,那么请使用list集合,list集合它是允许可以重复的,如果你不想保留重复元素,我们存张三,李四,张三,那么实际上到集合的时候呢,只剩下张三和李四了,那此时你就得使用set集合,set集合的特点是不允许出现重复元素的,那么list和set他们两都是接口,我们平时所说的list集合和set集合那么实际上都是指的他们的实现类,实际上我们在创建对象的时候也是他们的实现类,那么list接口的实现类有ArrayList和linkedlist,set接口的实现类他有hashset和treeset,双列集合map接口它有两个实现类需要我们学习,hashmap和treemap,以上就是关于我们集合的体系结构
学习完集合的体系结构之后,我们知道集合分为两个派系,一次只存一个元素的是单列集合,一次存一对儿元素的是双列集合,我们先来学第一个派系,单列集合,学习单列集合就需要从collection接口入手,那么关于collection我们要知道第一个它是单例集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素,第二个JDK 不提供此接口的任何直接实现.它提供更具体的子接口(如Set和List)实现,那我们在创建Collection集合的对象的时候,我们要注意,首先我们要用多态的方式,因为collection它是接口,那实现类我们就要用ArrayList,对象创建完毕,我们就要用里面的方法,在collection当中,下面这些方法都是我们常用的,
第一个add添加元素的方法:
第二个remove方法,移除指定元素,这个方法有返回值,boolean类型,如果删除成功了则返回true,如果不成功则返回false,
注意:我们这里有一个小技巧就是Ctrl+alt+F,可以将我们勾选中的代码抽取成一个方法,我们只需要给这个方法起个名字就行了
第三个方法removeif,根据条件进行删除,那么这是什么意思呢?其实我们可以将条件以lamda表达式的形式传递到这个参数当中,满足条件就删除,不满足条件则不删除,那么有同学就有疑问了,你怎么知道lamda表达式就是这么写的呢?我们看到源码抽象方法里的参数,代表集合中数据的类型,我们现在是字符串的类型,所以底层抽象方法中的参数就是string类型的,那我们在写lamda表达式的时候,小括号里面的内容一定要和抽象方法里的形参一致,那么我们大括号的结果要和我们的抽象方法的返回值保持一致,这个就是关于我们lamda表达式在这里书写的一个格式,所以就是简单来说,我们removeif方法的底层就是负责遍历,遍历的时候,得到每一个元素,然后把每一个元素都传递给这个lamda表达式,其中的s就表示每一个元素,然后每一个元素去做我们lamda表达式里这样一个判断就可以了,为true就删除,为false就不删
第四个clear方法,清空集合,顾名思义是不是把集合里所有的元素都干掉呀
第五个方法,contains方法,判断集合中是否存在指定的元素
第六个方法, isEmpty()方法, 判断集合是否为空
第七个方法, size()方法 集合的长度,也就是集合中元素的个数,
1.3Collection 集合概述和使用【应用】
-
Collection集合概述
-
是单例集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素
-
JDK 不提供此接口的任何直接实现.它提供更具体的子接口(如Set和List)实现
-
-
创建Collection集合的对象
-
多态的方式
-
具体的实现类ArrayList
-
-
Collection集合常用方法
方法名 说明 boolean add(E e) 添加元素 boolean remove(Object o) 从集合中移除指定的元素 boolean removeIf(Object o) 根据条件进行移除 void clear() 清空集合中的元素 boolean contains(Object o) 判断集合中是否存在指定的元素 boolean isEmpty() 判断集合是否为空 int size() 集合的长度,也就是集合中元素的个数 collection.removeIf( (String s)->{ return s.length()==3; } ); System.out.println(collection);
1.removeif 底层会遍历集合,得到集合中的每