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

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


目录

一.什么是集合?

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

三.Collection接口的使用:

四.Collection的三种遍历方式:

 1.迭代器遍历:

2.增强for遍历:

3.Lambda表达式遍历:


一.什么是集合?

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

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

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

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

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

三.Collection接口的使用:

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

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

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"));//trueSystem.out.println(coll);//[zhangsan, wangwu]//判断是否包含System.out.println(coll.contains("zhangsan"));//trueSystem.out.println(coll.contains("lisi"));//false//判空System.out.println(coll.isEmpty());//false//元素个数System.out.println(coll.size());//2}
}

四.Collection的三种遍历方式:

 1.迭代器遍历:

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

 下面代码为遍历模板:

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后出现了该方法,其内部原理就是个迭代器,所有的单列集合以及数组才可以利用该方法进行遍历

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遍历集合

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

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>() {@Overridepublic void accept(String s) {System.out.println(s);}});}
}

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

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

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表达式。


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

记得三连支持哈。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/689488.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

shared_ptr 引用计数相关问题

前言 智能指针是 C11 增加的非常重要的特性&#xff0c;并且也是面试的高频考点&#xff0c;本文主要解释以下几个问题&#xff1a; 引用计数是怎么共享的、怎么解决并发问题的资源释放时&#xff0c;控制块的内存释放吗weak_ptr 怎么判断对象是否已经释放 文中源码用的是 L…

XMind 2023 v23.05.2660软件安装教程(附软件下载地址)

软件简介&#xff1a; 软件【下载地址】获取方式见文末。注&#xff1a;推荐使用&#xff0c;更贴合此安装方法&#xff01; XMind 2023 v23.05.2660被视为顶尖思维导图软件&#xff0c;其界面简洁清爽&#xff0c;功能布局直观简单&#xff0c;摒弃繁复不实。尽管体积小巧&a…

RabbitMQ(安装配置以及与SpringBoot整合)

文章目录 1.基本介绍2.Linux下安装配置RabbitMQ1.安装erlang环境1.将文件上传到/opt目录下2.进入/opt目录下&#xff0c;然后安装 2.安装RabbitMQ1.进入/opt目录&#xff0c;安装所需依赖2.安装MQ 3.基本配置1.启动MQ2.查看MQ状态3.安装web管理插件4.安装web管理插件超时的解决…

【R语言与统计】SEM结构方程、生物群落、多元统计分析、回归及混合效应模型、贝叶斯、极值统计学、meta分析、copula、分位数回归、文献计量学

统计模型的七大类&#xff1a;一&#xff1a;多元回归 在研究变量之间的相互影响关系模型时候&#xff0c;用到这类方法&#xff0c;具体地说&#xff1a;其可以定量地描述某一现象和某些因素之间的函数关系&#xff0c;将各变量的已知值带入回归方程可以求出因变量的估计值&…

P8803 [蓝桥杯 2022 国 B] 费用报销

P8803 [蓝桥杯 2022 国 B] 费用报销 分析 最值问题——DP 题意分析&#xff1a;从N张票据中选&#xff0c;且总价值不超过M的票据的最大价值&#xff08;背包问题&#xff09; K天限制 一、处理K天限制&#xff1a; 1.对于输入的是月 日的格式&#xff0c;很常用的方式是…

笨方法自学python(二)-注释

注释和#号 程序里的注释是很重要的。它们可以用自然语言告诉你某段代码的功能是什么。在你想要临时移除一段代码时&#xff0c;你还可以用注解的方式将这段代码临时禁用。 # A comment, this is so you can read your program later. # Anything after the # is ignored by py…

SpringBoot自定义初始化sql文件 支持多类型数据库

我在resources目录下有init.sql初始化sql语句 指定sql文件的地址 sql内容如下&#xff1a; /*角色表*/ INSERT INTO #{schema}ccc_base_role (id, create_time, create_user_id, is_delete, role_name, status, update_time, update_user_id) VALUES(b89e30d81acb88448d412…

phpmyadmin配置文件权限错误

错误信息 配置文件权限错误,不应任何用户都能修改! 解决办法 找到phpmyadmin所在目录 给phpmyadmin目录授权755 chmod -R 755 phpmyadmin验证服务是否可以正常访问

履带车配置 一些小细节

履带车配置 一些小细节 485/CAN模式 自动识别上电后第一帧是485还是CAN指令&#xff0c;就进入对应通讯模式用485通讯这个驱动器通讯可以了&#xff0c;你再接CAN通讯&#xff0c;这个驱动器必须断电重启一下&#xff1b;不能在通电模式下切换 驱动器拨码开关 两个驱动器的…

PCIE协议-1

1. PCIe结构拓扑 一个结构由点对点的链路组成&#xff0c;这些链路将一组组件互相连接 - 图1-2展示了一个结构拓扑示例。该图展示了一个称为层级结构的单一结构实例&#xff0c;由一个根复合体&#xff08;Root Complex, RC&#xff09;、多个端点&#xff08;I/O设备&#xf…

增加表空间的数据文件

Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 表空间创建完成后&#xff0c;后期还可以为表空间增加数据文件&#xff0c;以扩大数据的存储空间。增加表空间数据文件的基本语法结构如下所示。 ALTER TABLESPACE 表空间名…

【免费】在线识别通用验证码接口

模块优势价格5元1000次&#xff0c;每天免费100次api文档支持 使用量小的完全够用了 <?phpfunction Post_base64($base64_str){$url http://api.95man.com:8888/api/Http/Recog?Taken41******QK&imgtype1&len0 ; $fields array( ImgBase64>$base64_str); $ch…