
目录
当时学习了ArrayList集合,还用ArrayList集合完成了学生管理系统。在集合基础知识部分就已经说过了集合类的特点。
集合最主要的作用就是用来存储和取出数据的。

现在我有三个数据的,很明显这三个数据是单列的,那么这样的数据在集合中存储它是通过Collection来实现的,所以说Collection集合它是单列集合。

这样的数据就是有itcast1张三、itcast2李四、itcast3王五,这样的双列数据组成的。他都输由双列组成的,这样的数据在存储中是通过Map集合来实现的,所以Map集合也被称做双列集合。

看这里图中数据出现了两个张三,这样的数据在单列集合中我们是同List集合实现的,所以说List集合中存储的元素是可重复的。

如果我们在集合中存储张三、李四、张三,但是第二个张三没有存储成功,那么这种数据存储我们在单列集合中使用的是Set集合来实现的,所以说Set集合存储数据的时候元素是不能重复的。
这些集合都是接口并不能直接创建对象并使用,所以我们还要来学习具体的实现类。

注意:用浅蓝色标记的是接口,红色窗口标记的是实现类。
在List下面,我们学习过ArrayList也是最常用的集合之一,我们也要学习LinkedList,至于其他的实现类我们不学习。
在Set下面我们重要学习HashSet和TreeSet,其他的不学习。
在Map下面我们重点学习HashMap,其他的不学习,而这里没有讲解的集合类它们可以按照讲解的格式自学并使用。
我们在学习的时候学的是接口,而在使用的时候使用的就是实现类。为什么会首先学习接口呢?
答:比如说我们学得Collection接口将来在学习List接口和Set接口的时候我们只需要学习它们的特有功能就可以了;再比如说在学习ArrayList和LinkedList的时候,我也只需要学习它们的特有功能就可以了。而在使用的时候,要使用具体的实现类,因为接口是抽象的是不能创建对象并实例化的。他必须通过具体的实现类来创建对象并实例化。
先到帮助文档中查看。

他在java.util包下,所以使用它需要导包。<E>表示泛型,表示集合中的元素类型。再往下看:

看上述描述,它是一个接口继承自Iterable<E>类,JDK不提供此接口的任何直接实现,他提供了更具体的子接口的实现,如Set和List说明,Collection这个接口他并没有具体的实现类,他将来想要创建对象就必须使用它的子接口Set或者List来创建对象。
Collection集合概述:
创建Collection集合的对象
程序演示:
- import java.util.ArrayList;
- import java.util.Collection;
-
- /*
- 创建Collection集合的对象
- 多态的方式
- ArrayList()
- */
- public class CollectionDemo01 {
- public static void main(String[] args) {
- //1.创建Collection集合对象
- Collection<String> collection = new ArrayList<String>();
-
- //2.添加元素,boolean add(E e);
- collection.add("hello");
- collection.add("world");
- collection.add("java");
-
- //3.输出集合对象
- System.out.println(collection);//[hello, world, java]
- /*
- 4.注意,我们输出的collection对象是new出来的,输出的结果不是地址值说明它
- 有重写toString方法.
- */
- }
- }

注意:使用clear方法会将集合中的所有元素都干掉,所以使用它的时候要慎重。
先演示一下如何查看一个类的所有信息:


然后我们来找boolean add(E)方法:

由此可见调用add这个方法他永远返回的都是true。
(或者直接跟进到类中,按下Alt+7 与上图效果同理)
程序演示:
- /*
- Collection集合的常用方法:
- boolean add(E a):添加元素.
- boolean remove(Object o):从集合中一处指定的元素.
- void clear():清空集合中的元素.
- boolean contains(Object o):判断集合中是否存在指定的元素
- boolean isEmpty():判断集合是否为空
- int size():集合的长度,也就是集合中元素的个数
- Alt+7可以打开一个窗口可以看到一个类的,所有信息.
- */
- public class CollectionDemo02 {
- public static void main(String[] args) {
- //1.创建集合对象
- Collection<String> c = new ArrayList<String>();
- //2.boolean add(E a):添加元素.返回一个boolean类型的结果
- System.out.println(c.add("hello"));//true,添加成功
- System.out.println(c.add("world"));//true
- System.out.println(c.add("java"));//true
- System.out.println(c.add("java"));//true,这里还是true说明这个集合可以添加重复的
- // System.out.println(c);//输出集合中的元素,[hello, world, java]
- //3.跟进查看add方法,可以看到add方法永远都是返回的true说明它可以无限制添加重复内容
- System.out.println("--------------");
-
- //4.boolean remove(Object o):从集合中一处指定的元素.
- System.out.println(c.remove("world"));//true,说明移除成功
- System.out.println(c.remove("javaweb"));//false,说明集合中没有就不会删除任何数据
- System.out.println(c);//[hello, java, java]
- System.out.println("--------------");
-
- //5.void clear():清空集合中的元素.注意返回值是void,所以直接使用对象调用即可
- c.clear();
- System.out.println(c);//[]
- System.out.println("--------------");
-
- //6. boolean contains(Object o):判断集合中是否存在指定的元素
- System.out.println(c.contains("java"));//因为上一步clear将集合中所有的数据都删除了,所以判断结果为false
- //7.添加数据再判断
- c.add("hello");
- c.add("world");
- c.add("java");
- System.out.println(c.contains("java"));//true,说明集合中这个元素是存在的,注意这只是判断不会做其他的操作
- System.out.println(c.contains("javaweb"));//false,因为集合元素中没有javaweb这个元素
- System.out.println("--------------");
-
- //8.boolean isEmpty():判断集合是否为空
- System.out.println(c.isEmpty());//false,不为空
- c.clear();//删除集合中的所有元素
- System.out.println(c.isEmpty());//true,为空
- System.out.println(c);//[]
- System.out.println("--------------");
-
- //int size():集合的长度,也就是集合中元素的个数
- System.out.println(c.size());//0,因为集合中没有元素,所以长度为0
- c.add("java");
- c.add("is my favourite");
- System.out.println(c.size());//2,集合中有两个元素
- System.out.println(c);//[java, is my favourite]
- }
- }
iterator概述:
Iterator:迭代器,集合的专用遍历方式
先到帮助文档中查看:

迭代器是一个接口,他在java.util包下,所以使用它需要导包,他也有泛型,这里的泛型<E>和集合中的泛型是一致的。
重点说里面的两个方法。
程序演示:
- import java.util.ArrayList;
- import java.util.Collection;
- import java.util.Iterator;
-
- /*
- Iterator:迭代器,集合的专用遍历方式.
- Iterator<E> iterator():返回此集合中元素的迭代器,通过集合的iterator()方法得到。
- 迭代器是通过集合的iterator()方法得到的,所以我们说它是依赖于集合而存在的。
- Iterator中的常用方法:
- E next():用于获取下一个元素的值。
- Boolean hasNext():用于做判断的,如果迭代中有更多元素,则返回true;如果没有元素就返回false。
- */
- public class IteratorDemo {
- public static void main(String[] args) {
- //1.创建集合对象
- Collection<String> c = new ArrayList<String>();
- //2.添加元素
- c.add("java");
- c.add("is");
- c.add("my");
- c.add("favourite");
- //3.遍历集合,Iterator<E> iterator():返回此集合中元素的迭代器,通过集合的iterator()方法得到。
- Iterator<String> iterator = c.iterator();
- /*
- 4.跟进一下iterator方法看一下这是一个什么东西
- Iterator<E> iterator();这里找到的是Collection的接口里面来了,
- 但是我们最终要找的是iterator最终实现的方法,所以我们要跟进ArrayList集合.
- 按下Alt+7找到iterator方法:
- public Iterator<E> iterator() {
- return new Itr();
- }
- 这里返回值是该接口Iterator<E>所以返回值应该是一个该接口的的实现类对象,
- 所以Itr应该实现了Iterator<E>接口.所以我们要跟进Itr
- private class Itr implements Iterator<E>{...}
- 这是一个类并实现了一个接口,Itr这个类是定义在ArrayList集合里面的,那么由此可见
- Itr这个类是一个内部类,这就是内部类的应用场景,在这个内部类里面重写了next方法,hasNext方法,
- forEachRemaining方法,等等.
- 我们通过Iterator<String> iterator = c.iterator();这个方法它返回的是Iterator具体的实现类,Itr的对象;
- 所以这是通过多态的形式来得到的Iterator的对象的.
- */
- // System.out.println(iterator.next());//得到了第一个元素 java
- //5.接着怎么拿数据呢?不知道没关系,再写一次
- // System.out.println(iterator.next());//这一次得到is
- // System.out.println(iterator.next());//my
- // System.out.println(iterator.next());//favourite
- //6.当集合中所有元素都输出之后,我们不小心多复制了一个
- // System.out.println(iterator.next());//报错:NoSuchElementException
- //7.拿到异常类名到帮助文档中查看,表示被求的元素不存在
-
- System.out.println("--------------------");
-
- //8.Boolean hasNext():用于做判断的,如果迭代中有更多元素,则返回true;如果没有元素就返回false。
- //使用if判断,获取元素之前判断集合中下一个有没有元素,如果有就获取,前提是需要把上面的iterator.next方法注视掉否则,这if不出来啊
- /*
- if(iterator.hasNext()){
- System.out.println(iterator.next());
- }
- if(iterator.hasNext()){
- System.out.println(iterator.next());
- }
- if(iterator.hasNext()){
- System.out.println(iterator.next());
- }
- if(iterator.hasNext()){
- System.out.println(iterator.next());
- }
- if(iterator.hasNext()){
- System.out.println(iterator.next());
- }//由于我们只有四个元素,这第五个if他经过判断为false就不会往if内部执行.
- */
-
-
- //10.使用循环改进,先注释掉上面的所有if语句
- while(iterator.hasNext()){
- // System.out.println(iterator.next());//尽量将这个获取到的元素值保存到变量中,然后再来输出变量
- String next = iterator.next();
- System.out.println(next);
- }
- }
- }

创建了一个集合,往集合内添加了三个字符串元素,最后通过迭代器遍历集合。
详解:
首先创建了一个集合:

接着添加第一个元素hello:

hello就添加到这个集合中了,接着添加第二个元素world:

在写来添加第三个元素:

接着往下执行,我们要得到一个迭代器:

被这个红色框框圈起来的就是迭代器中有的元素,那么在这里我们用一个箭头指向一开始的位置:

接下来做判断:

然后程序就问这个方法有元素吗?hasNext()方法就返回一个true 说到有元素啊。然后程序就说有元素那我就进来看看,然后程序说it小老弟你去给我查一下下一个元素,it小老弟就找它的next方法,说n哥下一个元素是啥啊,next就说:是hello啊哥。it小老弟把next方法的原话就返回给了程序,程序说我不听,你给String s老弟说就行了,然后s老弟就把it告诉它的话记下来了(也就获取到了hello这个元素)。
然后箭头就得指向下一个位置:

程序再往下走,就在控制台输出hello:

接着回到while()括号里的判断:

然后又进来问有元素吗?有!有就进入内部,通过next方法获取到world这个元素。然后箭头指向下一个:

然后在控制台输出world,并回到while(…)判断有没有元素:

有元素!既然有就又进来了,通过next方法获取到java这个元素,箭头指向下一个元素,并且在控制台输出java这个元素:

接着再回到判断,问还有元素吗?发现这次没有了他就进不去,他就往下执行,这个程序就结束了:

叙述集合的使用(图解):

需求:创建一个学生对象的集合,存储三个学生对象,使用程序实现再控制台遍历该集合。
思路:
代码演示:
- import java.util.ArrayList;
- import java.util.Collection;
- import java.util.Iterator;
- /*
- 需求:创建一个学生对象的集合,存储三个学生对象,使用程序实现再控制台遍历该集合。
- 思路:
- ① 定义学生类
- ② 创建Collection集合对象
- ③ 创建学生对象
- ④ 把学生添加到集合
- ⑤ 遍历集合(迭代器方式)
- ⑥ 输出
- */
-
- public class Student {
- public int sid;
- public String name;
-
- public Student() {
- }
-
- public Student(int sid, String name) {
- this.sid = sid;
- this.name = name;
- }
-
- public int getSid() {
- return sid;
- }
-
- public void setSid(int sid) {
- this.sid = sid;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
- }
-
- class Iterator_Student {
- public static void main(String[] args) {
- //1.创建集合
- Collection<Student> collection = new ArrayList<Student>();
-
- //2.给第一个学生添加信息
- Student student1 = new Student();
- student1.setSid(1001);
- student1.setName("双宝");
-
- //3.给第二个学生添加信息
- Student student2 = new Student();
- student2.setSid(1002);
- student2.setName("智宝");
-
- //4.给第三个学生添加信息
- Student student3 = new Student(1003,"昔年");
-
- //5.将学生添加到集合
- collection.add(student1);
- collection.add(student2);
- collection.add(student3);
-
- //6.创建Iterator对象返回集合中的迭代器
- Iterator<Student> iterator = collection.iterator();
- System.out.println("学号"+ "\t\t" + "姓名");
- //7.遍历集合
- while(iterator.hasNext()){
- //8.将得到的元素赋值到next变量中
- Student next = iterator.next();
- System.out.println(next.getSid() + "\t" + next.getName());
- }
-
- }
- }

--欢迎大家与我交流java知识