java学习--集合(大写二.2)

看尚硅谷视频做的笔记

2.collection接口及方法

jdk8里有一些默认的方法,更多的是体现的是一种规范,规范更多关注的是一些抽象方法。
看接口里面的抽象方法,选一个具体的实现类。
测试collection的方法,存储一个一个数据都有哪些功能方法可以进行调。
因为是接口,想演示接口中的方法,就需要先声明Collection
在这里插入图片描述

右边一定要选一个实现类,即就用ArrayList
此处就使用了多态
在这里插入图片描述

多态
场景时调的时候.
coll.时候只能调出Collection接口里面声明的方法
在这里插入图片描述
所以借着右边ArrayList看左边Collection接口的方法
具体执行还是右边ArrayList中的方法,那右边执行方法就等于左边Collection方法吗?(虽然接口中的方法么没有方法体,方法的用途是确定的,所以此处不影响去理解Collection接口中的方法)
在这里插入图片描述
COllection用ctrl+c,再打开API
在这里插入图片描述

在jdk8加了静态方法和默认方法,现在暂时不关注,后面String的Api再关注
在这里插入图片描述
现在关注的都是抽象方法,15个抽象方法
在这里插入图片描述
如果自己设计一个Collection,去存储一个一个的数据,会设计哪些方法?

2.1 添加

2.1.1add(E obj)添加元素对象到当前集合中,一个一个添加元素

在这里插入图片描述
在这里插入图片描述
123基本数据类型,此处是自动装箱操作在这里插入图片描述
在这里插入图片描述
造一个自定义类的对象Person
在这里插入图片描述
提供name,age,再提供空参构造器
在这里插入图片描述
再提供带参构造器
在这里插入图片描述
get,set方法省略,提供toString方法
在这里插入图片描述
new一个Tom
在这里插入图片描述
以上就添加了5个对象

此处打印的时候里面也调了toString方法d在这里插入图片描述
就将对象打印了出来
在这里插入图片描述

2.1.2addAll(Collection other):添加other集合中的所有元素对象到当前集合中,即this=this U other

(将参数中的元素都加到当前集合中coll)
在这里插入图片描述

新建coll1
在这里插入图片描述
对coll1加点数据,加完后进行调用addAll方法,再进行打印
在这里插入图片描述
在原有的数据上又加了两个数据,原先是5个元素,现在加了两个数据后是7个元素
在这里插入图片描述
size获取集合中元素个数的方法
在这里插入图片描述
在这里插入图片描述

2.1.3注意:add和addAll的区别

coll.add是将coll1集合看成是整体的一个元素
在这里插入图片描述
此时再查询集合元素的个数就是6
在这里插入图片描述
整个coll1集合中的元素充当了一个元素
在这里插入图片描述

在这里插入图片描述

2.2判断

2.2.1 int size()获取当前集合中实际存储的元素个数

2.2.2 boolean isEmpty()获取当前集合中是否为空集合

判断集合是否为空,false
在这里插入图片描述
在这里插入图片描述

2.2.3 boolean contains(Object obj)判断当前集合中是否存在一个与obj对象equals返回true的元素

判断是否包含AA
在这里插入图片描述
返回值为true
在这里插入图片描述
coll.contains(128),返回的结果为true
coll.contains(128)此处是自动装箱,128此处已经超出了数组的范围,这就是新new的,
在这里插入图片描述

在这里插入图片描述
这个包含的128是新new的,此处比较的不是==,不是比地址,
在这里插入图片描述

举例说一下,此处new的是一个String在这里插入图片描述
判断是否包含,此处返回也是true,比较的不是地址,而是比较的是内容
在这里插入图片描述
调的是equals方法,String和Integer都重写过,即都是true
在这里插入图片描述

此处这样是true
在这里插入图片描述

此处运行返回后,是false
System.out.println(coll.contains(new Person(“Tom”,12)));此处按理说调的还是equals方法-再去看Person类的代码,Person类的代码里没有重写equals方法,用的是Object里的equals方法就是==,进行地址比较

在这里插入图片描述
在这里插入图片描述
这两个地址相比显然不一样,即就是false
在这里插入图片描述
在这里插入图片描述
一般调contains时都是调的是equals方法,就是比内容,对于自定义对象的这种想往集合里放元素,都要求在自定义类中重写equals方法alt+insert 在这里插入图片描述

在这里插入图片描述
hashcode代码用不着可以进行注释
在这里插入图片描述
可以发现调用了几次
在这里插入图片描述
调用了四次
在这里插入图片描述

contains若添加的是自定义的类的对象,就需要在自定义类中加上重写的equals方法

2.2.4 boolean containsAll(Object obj)判断coll集合中的元素是否在当前集合中都存在,即coll集合中的元素是否在集合中的子集。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2.2.5 boolean equals(Object obj):判断当前集合与obj是否相等

在这里插入图片描述
在这里插入图片描述

2.3删除

在这里插入图片描述

2.3.1 void clear():从当前集合中删除第一个找到的与obj对象equals返回true的元素

在这里插入图片描述
在这里插入图片描述
打印size为0,不是空指针的原因是test3方法里有Collection p1=new ArrayList()对象
在这里插入图片描述
在这里插入图片描述
clear方法的原理
Collection p1=new ArrayList(),ArrayList集合底层也是数组
此处只能是放对象,都是Object,此处都是放的地址值(因为是引用类型)
在这里插入图片描述

在这里插入图片描述
地址值再指向new的对象
在这里插入图片描述

一个一个进行清理掉(而不是size为0,防止内存泄漏)
在这里插入图片描述

2.3.2 boolean remove(Object obj):删除指定元素。从当前集合中删除所有与coll集合中相同的元素,即this=this-this交集 coll

在这里插入图片描述
在这里插入图片描述
此处new一个person,能否删掉
在这里插入图片描述
此处删掉了,删的话判断有新new的对象就会进行删除,判断有没有时调的是equals方法(肯定有啊),有就会进行删除,remove是一旦找到了想要删除的元素就会停止进行操作

在这里插入图片描述

2.3.3 boolean removeAll(Collection coll):删除集合中的所有元素。从当前集合中删除两个集合中不同的元素,使得当前集合仅留与coll集合中的元素相同的元素,即当前集合中仅保留两个集合的交集。即this=this交集 coll

coll.removeAll(coll1)删除coll1所有元素
差集的意思
在这里插入图片描述

2.3.4boolean retainAll(Collection coll):从当前集合中仅保留与coll集合中的元素相同的元素、即当前集合中仅保留两个集合的交集,即this=this交集coll

即是交集
在这里插入图片描述

2.4其他在这里插入图片描述

2.4.1Object[] toArray():返回包含当前集合中所有元素的数组,集合—>数组

在这里插入图片描述
先整一个集合过来
在这里插入图片描述
集合怎么转换成数组
在这里插入图片描述
返回值是用Object类型数组进行装(因为添加的时候都是Object)
在这里插入图片描述
看一下数组具体的元素都有哪些?此处有一个简便的方法
在这里插入图片描述
这就是数组中的元素
在这里插入图片描述

2.4.2hashcode[]:获取集合对象的哈希值

在这里插入图片描述

2.4.2iterator:返回迭代器对象,用于集合遍历

2.5总结

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.5.1.常用方法:Collection中定义了15个抽象方法

add(Obj obj)
addAll(Collection coll)
size()
isEmpty()
contains(Object obj)
cotainsAll(Collection coll)
retainAll(Collection coll)
hashCode()
remove(Object obj)
removeAll(Collecion coll)
clear()
Iterator()
toArray()

2.5.1.集合与数组之间的相互转换

2.5.1.1 集合---->数组:toArray()方法,返回类型是一个Object类型的数组Object[]

在这里插入图片描述
在这里插入图片描述

2.5.1.2 数组---->集合:调用Arrays的静态方法asList(Object …obj)

在这里插入图片描述

数组转集合,首先要有数组,数组有一个工具类Arrays
在这里插入图片描述
Arrays有一个方法asList(T…a),形参是一个可变形参,此处就可以放可变数组
在这里插入图片描述
假设有一个数组arr,形参就是arr数组

在这里插入图片描述
返回值就是一个集合

alt+回车自动生成返回类型
在这里插入图片描述
泛型暂时没见过,先删除
List是Collection的子接口,即就是collection
在这里插入图片描述
即就转换成了collection
在这里插入图片描述

打印list
在这里插入图片描述
在这里插入图片描述
这种写法也是可以的
在这里插入图片描述
在这里插入图片描述

2.5.1.3 注意
① 场景1

此处有一个小细节,此时的代码是自动装箱
在这里插入图片描述
在这里插入图片描述
此处有多少个元素?
在这里插入图片描述

② 场景2

问下面的size是多少?
在这里插入图片描述asList只能放对象,不能放基本数据类型,只能将整个数组看成是一个对象,即就是一个元素,而对于Integer他是自动装箱后的对象
在这里插入图片描述

在这里插入图片描述

打印一下list、list1的元素的情况
在这里插入图片描述
第二个[[I@1888ff2c]是int类型的一维数组在这里插入图片描述

2.5.1.向Collection中添加元素的要求:要求元素所属的类一定要重写equals方法

在这里插入图片描述
在这里插入图片描述
因为调contains或者remove方法时,他要去调obj所属类的equals方法,调equals比较的是内容,若不重写的话会去调用Object中的==不太合适
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

记录:[android] SSLHandshakeException: Handshake failed 问题;已解决!

1、问题描述:在使用Retrofit2 时在安卓老设备上(安卓6.0)网络无法请求、安卓 10 、 11 未出现此问题?what? 原因:服务端 TLS 版本过高 2、废话不多说、解决方案A 、添加依赖:implementation org.conscrypt…

安徽理工大学2计算机考研情况,招收计算机专业的学院和联培都不少!

安徽理工大学(Anhui University of Science and Technology),位于淮南市,是安徽省和应急管理部共建高校,安徽省高等教育振兴计划“地方特色高水平大学”建设高校,安徽省高峰学科建设计划特别支持高校&#…

Java面试八股之myBatis与myBatis plus的对比

myBatis与myBatis plus的对比 基础与增强: MyBatis 是一个成熟的Java持久层框架,它允许开发者通过XML文件或注解来配置SQL语句和数据库映射,提供了一个灵活的方式来操作数据库,但需要手动编写所有的SQL语句和结果集映射。 MyBa…

oracle 外连接(+)和left join用法

案例1: select count(1) FROM TFUNDINFO A, TFUNDTYPE B WHERE A.VC_FUNDCODEB.VC_FUNDCODE() select count(1) FROM TFUNDINFO A, TFUNDTYPE B WHERE A.VC_FUNDCODEB.VC_FUNDCODE SELECT count(1): 这表示查询将返回一个计数,count(1)是一种常见的计数…

适用于 AI/ML 工作负载的有状态 KES

在此概念验证 (POC) 中,我们将探讨在 Kubernetes (k8s) 生态系统中安装和管理有状态密钥加密服务 (KES)。本指南促进了加密操作的无缝衔接,而不会将敏感的密钥材料暴露给使用型应用程…

Window和linux杀死进程的方式(命令行版)

在本文中,我们将探讨如何在Windows和Linux操作系统下高效地终止指定的进程,涵盖基本命令与高级技巧,确保您能灵活应对各种管理需求。 linux杀死进程 在终端中,我们通过下面命令找到端口运行的程序 lsof -i:72812. 然后输入下面…

见证数据的视觉奇迹——DataV Atlas

引言 前段时间一直沉迷于AI方向,几乎很久没碰大数据开发的相关内容了,今天突然看到阿里活动又推出DataV的体验了,我直接“啪”的一下就点进来了,很快啊!本来之前开发数字孪生的时候就接触过基础的DataV操作了&#x…

北京BJ90升级新款迈巴赫大连屏四座头等舱行政四座马鞍

北京BJ90升级奔驰迈巴赫头等舱行政四座大联屏的内饰效果会非常出色,将为车辆带来更豪华、高端的内饰氛围。以下是升级后可能的效果: • 科技感提升:奔驰的中控系统一直以来都以其先进的科技和用户友好的界面而闻名。升级后,北京B…

Retrieval-Augmented Generation for Large Language Models A Survey

Retrieval-Augmented Generation for Large Language Models: A Survey 文献综述 文章目录 Retrieval-Augmented Generation for Large Language Models: A Survey 文献综述 Abstract背景介绍 RAG概述原始RAG先进RAG预检索过程后检索过程 模块化RAGModules部分Patterns部分 RAG…

TEMU自养号测评系统如何搭建,有哪些要求

TEMU全托管目前优点是全程不用去运营,只要做好选品,质检就可以了。缺点是无法自由决定产品的营销策略,这也是使得卖家会去通过自养号测评方式来为产品链接打造权重。 TEMU自养号测评的搭建是一个涉及多个步骤和细节的过程。以下是一个清晰的…

智能优化算法改进策略之局部搜索算子(六)--进化梯度搜索

1、原理介绍 进化梯度搜索(Evolutionary Gradient Search, EGS)[1]是兼顾进化计算与梯度搜索的一种混合算法,具有较强的局部搜索能力。在每次迭代过程中,EGS方法首先用受进化启发的形式估计梯度方向,然后以最陡下降的方式执行实际的迭代步骤&…

QListView、QTableView或QTreeView截取滚动区域(截长图)

本文以QTreeView为例,理论上继承自QAbstractScrollArea的类都支持本文所述的方法。 一.效果 一共5个文件夹,每个文件文件夹下有5个文件,先把文件夹展开,然后截图。将滚动条拖到居中位置,是为了证明截图对滚动条无影响 下面是截的图 二.原理 将滚动区域的viewport设置为…

lvgl_micropython development for esp32

​​​​​​上一篇博客已经编译源码生成了ESP32C3的固件lvgl_micropy_ESP32_GENERIC_C3-4.bin,这篇博客开发一个界面。 一、开发环境 1、安装开发工具 Windows安装Thonny工具,官网链接:Thonny, Python IDE for beginners。 参考博客:用M…

已解决javax.management.BadBinaryOpValueExpException异常的正确解决方法,亲测有效!!!

已解决javax.management.BadBinaryOpValueExpException异常的正确解决方法,亲测有效!!! 目录 问题分析 出现问题的场景 报错原因 解决思路 解决方法 分析错误日志 检查操作数合法性 确认操作数类型匹配 优化代码逻辑 增…

如何发现Redis热Key,有哪些解决方案?

什么是 hotkey? 如果一个 key 的访问次数比较多且明显多于其他 key 的话,那这个 key 就可以看作是 hotkey(热 Key)。例如在 Redis 实例的每秒处理请求达到 5000 次,而其中某个 key 的每秒访问量就高达 2000 次&#x…

【HTTPS云证书部署】SpingBoot部署证书

这里以华为云证书为例。 1. 下载证书 2. 解压 3. 选择.top_Tomcat复制到SpringBoot的Resource/source下 4. 在.properties文件中进行配置 修改key-store和key-store-password

秋招突击——第八弹——Redis是怎么运作的

文章目录 引言正文Redis在内存中是怎么存储的面试重点 Redis是单线程还是多线程面试重点 内存满了怎么办?面试重点 持久化介绍面试重点 RDB持久化面试重点 AOF日志面试重点 总结 引言 差不多花了两天把redis给过了,早上也只背了一半,完成回去…

正则表达式与文本处理器

正则表达式 基础正大表达式 查看特定字符 grep grep-n the test.txt grep-in the test.txt-n 显示行号 -i 不区分大小写 -v 反转查找 [] :中括号里可以写元素,内容符合任意元素,就会过滤出来 ^ :写在中括号里,代表取反。以^开头&…

微信 小程序应用,页面,组件的生命周期

组件生命周期 组件的生命周期:指的是组件自身的一些钩子函数,这些函数在特定的时间节点时被自动触发 组件的生命周期函数需要在 lifetimes 字段内进行声明 最重要的生命周期是 created attached detached 包含一个组件生命周期流程的最主要时间点 定…

天马学航——智慧教务系统(移动端)开发日志三

天马学航——智慧教务系统(移动端)开发日志三 日志摘要:更新了学生选课模块、我的课程模块以及退课的功能,优化了后端数据库的缓存 1、学生选课模块 学生选课模块主要实现,学生根据需求进行选课操作,通过后端查询到所有教师的课…