目录
collection:单列集合的祖宗,一次只能往集合里面添加一个元素
红色:接口
蓝色:实现类

List系列的集合:添加的元素是有序的、可重复的、有索引的
set系列反之:无序、不可重复、无索引的
名词解释:
有序:指存和取顺序一样。和大小排列等无关
可重复:元素可以重复相同
有索引:可以通过索引找到
- package bao;
- import java.util.ArrayList;
- import java.util.Collection;
- public class Test {
- public static void main(String[] args) {
- //注意点:collection是一个接口,不能直接创建他的对象.现在为了更直观的学习,创建他实现类的对象来展示,比如ArrayList
- Collection
coll = new ArrayList<>(); - //collection最常见的6个方法
- //1.添加元素
- //注意点:要往List系列添加元素,永远都是true,因为这个集合是允许元素重复的。而set就不一定了
- coll.add("小狗");
- coll.add("大狗");
- System.out.println(coll);//[小狗, 大狗]
-
-
- //2.删除
- //注意点:因为collection里面定义的是共性的方法,不能通过索引进行删除,只能通过元素的对象进行删除
- //删除元素存在则true,不存在则false
- coll.remove("大狗");
- System.out.println(coll);//[小狗]
-
- //3.判断元素是否存在
- //注意点:这个方法底层是通过equals来进行判断的。
- //如果这个集合new的是自定义对象,比如student这种,要进行重写里面的方法才能返回true。
- boolean bl = coll.contains("as");
- System.out.println(bl);//false
-
- //4.判断集合是否为空
- //底层就是判断这个集合元素长度是否为0
- boolean is = coll.isEmpty();
- System.out.println(is);//false
-
- //5.获取集合的长度
- int size = coll.size();
- System.out.println(size);//1
-
- //6.清空
- coll.clear();
- System.out.println(coll);//[]
- }
- }
运行结果:
[小狗, 大狗]
[小狗]
false
false
1
[]
------------------------------------------------------------------------------------------遍历方式------------------------------------------------------------------------------
1.在遍历的过程中需要删除元素------迭代器
2.仅仅想遍历可以选择增强for或者lambda
答:因为set集合里面是没有索引的,用不了for循环去遍历,只能用迭代器方式去遍历。
答:迭代器是集合专用的遍历方式,不依赖索引进行遍历
1.迭代器遍历完成,指针不会复位
2.循环中只能用一次next方法
3.迭代器遍历时,不能用集合的方式进行增加和删除
4.报错:NoSuchElementException
4.遍历完成后还想再进行二次遍历怎么办?
答:再创建一个迭代器去遍历
- package bao;
- import java.util.ArrayList;
- import java.util.Collection;
- import java.util.Iterator;
-
- public class Test {
- public static void main(String[] args) {
- Collection
coll = new ArrayList<>(); - //1.添加元素
- coll.add("霹雳火");
- coll.add("急先锋");
-
- //2.创建迭代器对象,迭代器就像一个箭头,默认初始值为0索引
- Iterator
it = coll.iterator(); - //3.开始进行循环获取元素
- while (it.hasNext()){//判断元素是否存在,存在则执行下一步
- String next = it.next();//next获取元素并移动指针
- System.out.println(next);//霹雳火 急先锋
- }
- //迭代器总结:创建iterator方法,通过while循环,用next进行遍历
-
- //二、错误示范
- //1.遍历完成后再调用一次next方法,会报错NoSuchElementException异常
- //直白解释:都遍历完成了,还要再next指向后一位没有元素的空位置,肯定会报错的
- String next = it.next();
- System.out.println(next);//报错:NoSuchElementException
- }
- }
运行结果:(这里是把错误示范注释掉了,要不然会报错)
霹雳火
急先锋
1.增强for遍历底层就是迭代器,为了简化迭代器书写而产生的
2.他是JDK5以后才出现的,其内部原理就是一个Iterator迭代器
3.所有的单列集合和数组才能使用
for(元素的数据类型 变量名:数组或者集合){
//打印输出
}
- package bao;
- import java.util.ArrayList;
- import java.util.Collection;
-
- public class Test {
- public static void main(String[] args) {
- Collection
coll = new ArrayList<>(); - //1.添加元素
- coll.add("霹雳火");
- coll.add("急先锋");
- //快捷键:集合变量名.for+回车键
- for (String s : coll) {
- System.out.println(s);
- }
- }
- }
运行结果:
霹雳火
急先锋
- package bao;
- import java.util.ArrayList;
- import java.util.Collection;
-
- public class Test {
- public static void main(String[] args) {
- Collection
coll = new ArrayList<>(); - //1.添加元素
- coll.add("霹雳火");
- coll.add("急先锋");
- coll.forEach(s -> System.out.println(s));
- //快捷方式:1.coll.forEach,2.括号里面输入s+回车 3.打印输出变量s
- }
- }
运行结果:
霹雳火
急先锋