Java --- 集合(1)--- 带你了解Collection接口以及三种遍历方式

引言:本期博客摘选黑马程序员与Java从入门到精通,如果有不准确的地方还请指出,另外也感谢各位大佬点击进来观看。


目录

一.什么是集合?

二.单列集合的体系结构:

三.Collection接口的使用:

四.Collection的三种遍历方式:

1.迭代器遍历:

2.增强for遍历:

3.Lambda表达式遍历:


一.什么是集合?

在Java中,java.util包中提供了一些集合类,而这些集合类也会被称为容器。这里提到容器,我们也会想到数组,那么数组与集合的区别是什么呢?数组的长度是固定的,而集合的长度是可变的,另外数组是被用来存储基本数据类型,而集合是可以被用来存储引用数据类型,如果想存储基本数据类型,则需给对应的基本数据类型以包装类的形式定义。

我们常用的集合分为两类:单列集合 (Collection)与双列集合(Map)。本期内容将给大家介绍单列集合的相关内容。

二.单列集合的体系结构:

请看下面图片:(图片摘要黑马程序员)

上面红色框代表接口,而蓝色框则代表实现类。

三.Collection接口的使用:

Collection接口是单列集合的祖宗接口,因为是接口嘛,所以全部单列集合都可以通过继承来使用接口内部的方法。

下图代码给大家带来上面方法的使用,由于Collection是接口,以至于不可以被直接使用,这里就先创建他的实现类对象。

java 复制代码
import java.util.ArrayList;
import java.util.Collection;

public class Test1 {
    public static void main(String[] args) {
        Collection<String> coll = new ArrayList<>();
        //添加
        coll.add("zhangsan");
        coll.add("lisi");
        coll.add("wangwu");
        //打印
        System.out.println(coll);//[zhangsan, lisi, wangwu]
        //删除
        System.out.println(coll.remove("lisi"));//true
        System.out.println(coll);//[zhangsan, wangwu]
        //判断是否包含
        System.out.println(coll.contains("zhangsan"));//true
        System.out.println(coll.contains("lisi"));//false
        //判空
        System.out.println(coll.isEmpty());//false
        //元素个数
        System.out.println(coll.size());//2
    }
}

四.Collection的三种遍历方式:

1.迭代器遍历:

迭代器,Iterator,也是一个接口,主要用于遍历集合中的元素。

下面代码为遍历模板:

java 复制代码
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class Test1 {
    public static void main(String[] args) {
        Collection<String> coll = new ArrayList<>();
        //添加
        coll.add("zhangsan");
        coll.add("lisi");
        coll.add("wangwu");
        Iterator<String> it = coll.iterator();
        while(it.hasNext()){
            String str = it.next();
            System.out.println(str);
        }
    }
}

那么如何理解迭代器的两种方法呢?

1.hasNext()方法是判断当前位置有没有元素,起到判断的作用。

2.next()方法会做两件事,首先获取当前元素并返回,然后将迭代器向下移动

所以利用这两种方法就可以使用迭代器获取集合内部对象。

注意!!!

  1. 迭代器使用完成不会再重新复位进行使用。
  2. 每次while循环只能使用一次next()方法,因为如果使用两次,在最后会发生迭代器越界,导致报错。
  3. 迭代器遍历不可以使用集合的方法增加或者删除,我们可以利用迭代器内部方法it.remove(),移除的是当前迭代器指向的数据。

2.增强for遍历:

为了简化迭代器树下,在JDK5后出现了该方法,其内部原理就是个迭代器,所有的单列集合以及数组才可以利用该方法进行遍历。

java 复制代码
public class Test1 {
    public static void main(String[] args) {
        Collection<String> coll = new ArrayList<>();
        //添加
        coll.add("zhangsan");
        coll.add("lisi");
        coll.add("wangwu");
        for(String s : coll){
            System.out.println(s);
        }
    }
}

我们在这里++可以把 s 当成第三方变量,在循环过程依次表示集合中的每一个数据++。

注意,利用s是不会修改集合中原本的数据的!!!

3.Lambda表达式遍历:

在JDK8开始,Java给我们提供了更简单且直接的遍历集合的方式。

|-----------------------------------------------------|--------------|
| 方法名称 | 说明 |
| default void forEach(Consumer<? super T> action): | 结合lambda遍历集合 |

首先,我们先写一个匿名内部类的形式:

java 复制代码
import java.util.ArrayList;
import java.util.Collection;
import java.util.function.Consumer;

public class Test1 {
    public static void main(String[] args) {
        Collection<String> coll = new ArrayList<>();
        //添加
        coll.add("zhangsan");
        coll.add("lisi");
        coll.add("wangwu");
        coll.forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        });
    }
}

其底层原理也是遍历集合得到每一个元素,并将其传递给accept方法,s同样也表示集合中的每一个元素。

下面看lambda表达式的正确书写格式:

java 复制代码
import java.util.ArrayList;
import java.util.Collection;

public class Test1 {
    public static void main(String[] args) {
        Collection<String> coll = new ArrayList<>();
        //添加
        coll.add("zhangsan");
        coll.add("lisi");
        coll.add("wangwu");
        coll.forEach (s->System.out.println(s));//lambda
    }
}

肯定有人会不理解这里是如何改变的???

实际上lambda表达式的语法非常特殊,其语法格式:

()->结果表达式

参数->结果表达式

(参数1,参数2,...)->结果表达式

(类型1 参数1,类型2 参数2,...)->结果表达式

理解:

我们可以对比上面的两组代码,当其内部仅一个参数,则()与数据类型可以省略,如果有两个数据类型相同的参数,那么可以省略数据类型 ,如果数据类型不相同,就不可以省略。如果下面的结果表达式内容仅一行代码则可以省略 ; 与 { } ,如果多行代码则不可以省略。

这里先介绍这么多,后序文章会给大家写一篇详细说明Lambda表达式。


好了今天的内容就到这里了,关注博主,下期给大家继续介绍集合的相关知识,加油!!!

记得三连支持哈。

相关推荐
ok!ko1 小时前
设计模式之原型模式(通俗易懂--代码辅助理解【Java版】)
java·设计模式·原型模式
2402_857589361 小时前
“衣依”服装销售平台:Spring Boot框架的设计与实现
java·spring boot·后端
吾爱星辰2 小时前
Kotlin 处理字符串和正则表达式(二十一)
java·开发语言·jvm·正则表达式·kotlin
ChinaDragonDreamer2 小时前
Kotlin:2.0.20 的新特性
android·开发语言·kotlin
IT良2 小时前
c#增删改查 (数据操作的基础)
开发语言·c#
哎呦没3 小时前
大学生就业招聘:Spring Boot系统的架构分析
java·spring boot·后端
Kalika0-03 小时前
猴子吃桃-C语言
c语言·开发语言·数据结构·算法
_.Switch3 小时前
Python Web 应用中的 API 网关集成与优化
开发语言·前端·后端·python·架构·log4j
编程、小哥哥3 小时前
netty之Netty与SpringBoot整合
java·spring boot·spring
代码雕刻家3 小时前
课设实验-数据结构-单链表-文教文化用品品牌
c语言·开发语言·数据结构