Java学习笔记===》13.集合进阶==>单列集合

文章详细介绍了Java中的Collection接口,包括它的特点、常用方法如add、clear、remove等。此外,文章还通过示例展示了如何使用ArrayList实现Collection接口,并演示了不同类型的遍历方法:迭代器遍历、增强for循环和Lambda表达式的遍历方式。最后,强调了在遍历过程中需要注意的事项和细节。
摘要由CSDN通过智能技术生成

单列集合(Collection)

一、单列集合:

1.特点

​ 单列集合Collection:是单列集合的祖宗接口,它的功能是全部单列集合都可以继承使用的

在这里插入图片描述

2.Collection集合系列常用方法:

​ 添加的元素是有序(这里的有序是存和取的顺序是一样的)、可重复、有索引

方法名称说明
punlic boolean add(E e)把给定的对象添加到当前集合当中
public void clear ()清空集合中所有的元素
public booolean remove(E e)把给定的对象再当前集合中删除
public bolean cintains(Object obj)判断当前集合中是否包含给定的对象
public boolean isEmpty()判断当前集合是否为空
public int size()返回集合中元素的个数/集合的长度
package com_06Gather._01gatherStructure;

import java.util.ArrayList;
import java.util.Collection;

public class CollectionTest01 {
    public static void main(String[] args) {
/*
| 方法名称                           | 说明                             |
| ---------------------------------- | -------------------------------- |
| punlic boolean add(E e)            | 把给定的对象添加到当前集合当中   |
| public void clear ()               | 清空集合中所有的元素             |
| public booolean remove(E e)        | 把给定的对象再当前集合中删除     |
| public bolean cintains(Object obj) | 判断当前集合中是否包含给定的对象 |
| public boolean isEmpty()           | 判断当前集合是否为空             |
| public int size()                  | 返回集合中元素的个数/集合的长度  |

        注意点:
        collection是一个接口,我们不能直接创建它的对象
        所以,我们在使用方法的时候,只能创建实现类的对象
        实现类:ArraysList
 */
        //利用多态的方式创建实现类对象
        Collection<String> coll = new ArrayList<>();

        //1.punlic boolean add(E e)            | 把给定的对象添加到当前集合当中
        //细节:返回值
        //1.如果我们往List集合中添加元素,那么方法永远返回true,因为List集合是允许元素,不存在添加失败的情况
        //2.但是往Set集合添加元素的时候,如果添加的元素已经存在,那么就会添加失败返回false,因为Set集合是不允许重复的
        coll.add("aaa");
        coll.add("bbb");
        coll.add("ccc");
        System.out.println(coll);


        //2.public void clear ()               | 清空集合中所有的元素
        //coll.clear();
        System.out.println(coll);


        //3.public booolean remove(E e)        | 把给定的对象再当前集合中删除
        //细节1:因为Collection里面定义的是共性的方法,所以此时不能通过索引删除,只能通过元素的对象进行删除
        //细节2:方法会有一个布尔类型发的返回值,删除成功返回true,删除失败返回false
        //如果要删除的元素不存在就会删除失败
        //coll.remove("bbb");
        boolean result1 = coll.remove("bbb");
        boolean result2 = coll.remove("eee");
        System.out.println(coll);
        System.out.println(result1);
        System.out.println(result2);


        //4.public bolean cintains(Object obj) | 判断当前集合中是否包含给定的对象
        //细节:contaains方法底层依赖的是equals方法进行判断是否存在的
        //所以,如果集合中存储的是自定义对象,也想通过contains方法来判断是否包含,那么在JavaBean类中一定要重写equals方法
        boolean result3 = coll.contains("aaa");
        boolean result4 = coll.contains("ddd");
        System.out.println(coll);
        System.out.println(result3);
        System.out.println(result4);


        //5.public boolean isEmpty()           | 判断当前集合是否为空
        boolean result5 = coll.isEmpty(); //底层判断的是集合的长度是否为0
        System.out.println(result5);


        //6.public int size()                  | 返回集合中元素的个数/集合的长度
        int size = coll.size();
        System.out.println(size);
    }
}
package com_06Gather._01gatherStructure;

import java.util.ArrayList;
import java.util.Collection;

public class CollectionTest02 {
    public static void main(String[] args) {
        //1.创建集合对象
        Collection<Student> coll = new ArrayList<>();

        //2.创建3个集合对象
        Student s1 = new Student("xiaoshishi",22);
        Student s2 = new Student("xiaodandan",21);
        Student s3 = new Student("xiaohuihui",18);

        //3.将学生对象添加到集合当中
        coll.add(s1);
        coll.add(s2);
        coll.add(s3);

        //4.判断结合中某一个学生对象是否存在
        Student s4 = new Student("xiaohuihui",18);
        //如果同姓名,同年龄,就认为是同一个学生
        boolean result2 = coll.contains(s4);
        //因为contains方法在底层是依靠equals方法判断对象是否一致的
        //如果存的是自定义对象,没有重写equals方法,那么默认使用的是Object类中的equals方法进行判断
        //而在Object类中的equals方法,是依赖地址值进行判断的
        //需求:如果同姓名同年龄,就认为是同一个学生
        //所以,需要在自定义的JavaBean类中,重写equals方法就可以了
        System.out.println(result2);        //false

    }
}
重写之后的equals方法

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    Student student = (Student) o;
    return age == student.age && Objects.equals(name, student.name);
}

3.Collecction集合系列的通用遍历方式

(1)迭代器遍历(不依赖索引)

迭代器再Java中的类是Iterator,迭代器是集合专用的遍历方式

①Collection集合获取迭代器
方法名称说明
Iterator iterator返回迭代器对象,默认指向当前集合的0索引
②Iterator中的常用方法
方法名称说明
boolean hasNext()判断当前位置是否有元素,有元素返回true,没有元素则返回false
E next()获取当前位置的元素,并将迭代器对象移向下一个位置
Iterator<String> it = list.iterator();   //获取迭代器对象
 while(it.hasNtxt()){		//判断当前指向位置是否有元素,有元素返回true,否则返回false
	String str = it.next(); //获取当前元素,并向后移动指针
    System.out.println(str); //将获取到的元素进行打印
     
     //while循环结束的条件:当it.hasNext()没有获取到元素的时候返回false,则循环停止
}                                  
package com_06Gather._01gatherStructure;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class CollectionTest03_Iterator {
    public static void main(String[] args) {
/*
 (1)Collection集合获取迭代器
| 方法名称               | 说明                                    |
| ---------------------- | --------------------------------------- |
| Iterator<E e> iterator | 返回迭代器对象,默认指向当前集合的0索引 |
(2)Iterator中的常用方法
| 方法名称            | 说明                                                        |
| ------------------- | ----------------------------------------------------------- |
| boolean hasNext() | 判断当前位置是否有元素,有元素返回true,没有元素则返回false |
| E next()          | 获取当前位置的元素,并将迭代器对象移向下一个位置            |
 */

       //1.创建集合对象并添加元素
        Collection <String> coll = new ArrayList<>();
        coll.add("dcd");
        coll.add("aaa");
        coll.add("sss");
        coll.add("ddd");
        coll.add("fff");

        //2.获取迭代器对象
        //迭代器就好比是一个箭头,默认指向集合的0索引处
        Iterator<String> it = coll.iterator();

        //3.利用循环不断地去获取集合里面的每一个元素
        while (it.hasNext()){
            String str = it.next();
            //4.next方法的两件事情
            //(1)获取当前指向的元素
            //(2)将指针向后移动一个索引单位
            System.out.print(str+", ");
        }
    }
}
③注意事项:

Ⅰ、如果当前位置没有元素,还要强行获取,会报错NoSuchElementException(没有这个元素异常)

Ⅱ、迭代器遍历完毕,指针不会复位

Ⅲ、循环中只能使用一次next方法

Ⅳ、迭代器遍历时,不能用集合的方法进行增加或删除

package com_06Gather._01gatherStructure;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class CollectionTest04_Iterator {
    public static void main(String[] args) {
/*注意点
Ⅰ、报错NoSuchElementException(没有这个元素异常)
Ⅱ、迭代器遍历完毕,指针不会复位
Ⅲ、循环中只能使用一次next方法
Ⅳ、迭代器遍历时,不能用集合的方法进行增加或删除
    如果要进行删除操作,只能使用Iterator里面的remove方法进行删除,但如果要增加暂时没有办法
 */
        //1.使用集合并添加元素
        Collection<String> coll = new ArrayList<>();
        coll.add("aaa");
        coll.add("bbb");
        coll.add("ccc");
        coll.add("ddd");
        coll.add("eee");

        //2.获取迭代器对象
        //迭代器就好比是一个箭头,默认指向集合的0索引
        Iterator<String> it = coll.iterator();
        //3.利用循环不断地去获取集合中的每一个元素
        while(it.hasNext()){
            //4.next方法的两件事情
            //(1)获取当前指向的元素
            //(2)将指针向后移动一个索引单位
            String str = it.next();
            System.out.println(str);
        }
        //当上面的循环结束之后,迭代器的指针已经指向了最后没有元素的位置
        //System.out.println(it.next());      //报异常:NoSuchElementException

        //迭代器遍历完毕,指针不会复位
        System.out.println(it.hasNext());
        System.out.println(it.hasNext());
        System.out.println(it.hasNext());       //false

        //如果我们要继续使用第二次遍历集合,只能再次获取一个新的迭代器对象
        //2.获取迭代器对象
        //迭代器就好比是一个箭头,默认指向集合的0索引
        Iterator<String> it2 = coll.iterator();
        //3.利用循环不断地去获取集合中的每一个元素
        while(it2.hasNext()){
            //4.next方法的两件事情
            //(1)获取当前指向的元素
            //(2)将指针向后移动一个索引单位
            String str2 = it2.next();
            //循环中只能使用一次next方法

            //Ⅳ、迭代器遍历时,不能用集合的方法进行增加或删除
            if("bbb".equals(str2)){
                //coll.add("bbb");        //报异常:ConcurrentModificationException===》并发修改异常
                //这里要删除的话,不能使用集合的方法进行删除
                //而是要使用Iterator里面的方法remove
                it2.remove();
            }

            System.out.println(str2);
            System.out.println(str2);   //报异常NoSuchElementException
        }


    }
}
④小结

1.迭代器在遍历集合的时候是不依赖索引的

2.迭代器里面要掌握的三个方法:

Iterator<String> it = list.iterator();   //获取迭代器对象
 while(it.hasNtxt()){		//判断当前指向位置是否有元素,有元素返回true,否则返回false
	String str = it.next(); //获取当前元素,并向后移动指针
    System.out.println(str); //将获取到的元素进行打印
     
     //while循环结束的条件:当it.hasNext()没有获取到元素的时候返回false,则循环停止
}      

3.迭代器的四个细节

Ⅰ、如果当前位置没有元素,还要强行获取,会报错NoSuchElementException(没有这个元素异常)

Ⅱ、迭代器遍历完毕,指针不会复位

Ⅲ、循环中只能使用一次next方法

Ⅳ、迭代器遍历的过程中,不能用集合的方法进行增加或删除

(2)增强for便利

★增强for的底层就是迭代器,为了简化迭代器的代码书写的

★它是JDK5之后出现的,其内部原理就是一个Iterator迭代器

★所有的单列集合和数组才能用增强for进行遍历

①格式:
for(元素的数据类型 变量名 :数组或集合){
    
}
package com_06Gather._01gatherStructure;

import java.util.ArrayList;
import java.util.Collection;

public class CollectionTest05_for {
    public static void main(String[] args) {
/*
★增强for的底层就是迭代器,为了简化迭代器的代码书写的
★它是JDK5之后出现的,其内部原理就是一个Iterator迭代器
★所有的单列集合和数组才能用增强for进行遍历
##### (1)格式:

for(元素的数据类型 变量名 :数组或集合){
}
 */

        //1.创建集合并添加元素
        Collection<String> coll = new ArrayList<>();
        coll.add("aaa");
        coll.add("bbb");
        coll.add("ccc");
        coll.add("ddd");


        //使用增强for进行遍历
        //注意点
        //s:biaoshi一个第三方变量,在循环过程中一次表示集合中的每一个数据
        for (String str : coll){
            System.out.println(str);
        }

        //快捷方式书写增强for
        //集合名.for+回车
    }
}
②增强for的细节:

★修改增强for中的变量,不会改变集合中原本的数据

forString s : coll){
    s = "q";
}

(3)Lambda表达式遍历

得益于JDK8开始的新技术Lambda表达式,提供了一种更简单、更直接的遍历集合的方式

方法名称说明
default void forEach(Consumer<?super T > action) :结合lambda遍历集合
package com_06Gather._01gatherStructure;

import java.util.ArrayList;
import java.util.Collection;

public class CollectionTest06_Lambda {
    public static void main(String[] args) {
/*
#### ③Lambda表达式遍历
得益于JDK8开始的新技术Lambda表达式,提供了一种更简单、更直接的遍历集合的方式
| 方法名称                                           | 说明               |
| -------------------------------------------------- | ------------------ |
| default void forEach(Consumer<?super T > action) : | 结合lambda遍历集合 |
 */
        //1.创建集合并添加元素
        Collection<String> coll = new ArrayList<>();
        coll.add("aaa");
        coll.add("bbb");
        coll.add("ccc");
        coll.add("ddd");

        //2.利用匿名内部类的形式遍历

        //forEach的底层原理
        //会自己遍历集合,一次得到每一个元素,
        // 把得到的每一个元素,传递给下面的accept方法
        //s一次表示集合中的灭一个数据
        /*coll.forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        });*/

        //利用Lambda表达式进行遍历集合、
        coll.forEach(s ->System.out.println(s));
    }
}

4.Collection总结

1.collection是单列集合的顶层接口,所有防火阀被list和Set系列集合共享

2.创建成员方法:

add ,clear , remove, contains, idEmpty , size

3.三种通用的遍历方式

Ⅰ迭代器:在遍历的过程中需要删除元素,请使用迭代器

Ⅱ增强for:仅遍历

ⅢLambda:仅遍历

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值