Java学习笔记(17)

集合进阶

单列集合

Collection

List set

Add clear remove contains isempty size

Add方法可能也会添加失败

同理,可能删除失败

Contains细节

为什么要重写equals?

因为contains底层用的是object类中的equals方法,比较的是地址值,这样即使元素相同,也会返回false,所以要重写equals方法

Collection遍历方式

迭代器遍历 iterator

获取迭代器,是调用.iterator方法,不是new,获取一个迭代器对象

迭代器遍历时,不依赖索引,利用指针和移动的方式获取集合中的元素

遍历完毕后,指针不会复位,会一直指向最后没有元素的位置

如果再想遍历,只能再次获取一个新的迭代器

第三点的意思主要是每次使用next都会移动指针,循环中多次使用next可能会指向没有元素的位置。

要删除,得用迭代器的remove方法删除;添加暂时没有办法

增强for遍历

JDK5之后出现,原理就是迭代器,简化迭代器代码

s表示第三方变量,依次表示每一个数据

细节:修改s,不会改变集合中的数据

Lambda表达式遍历

JDK8开始有

.forEach

只有迭代器可以删除掉collection的元素

List集合

删除remove 注意的细节

这里的1表示的是索引,而不是元素1

会优先调用实参和形参类型一致的方法

如果一定要删掉元素1

需要手动装箱,把1变成integer类型

List遍历

列表迭代器  也是一个接口,是iterator的子接口

在遍历的过程中,可以增删元素

迭代器可以删(用的是迭代器的remove方法,而不是集合的remove方法)

列表迭代器同时可以增删(用的也是迭代器的方法)

数据结构

后进先出,先进后出

队列

先进先出,后进后出

数组  (在内存中是一片连续的空间)

查询快,增删慢

链表

增删快,查询慢

只需要改变地址

双向列表

Arraylist

扩容机制

添加第一个元素的源码

添加第11个元素(或一次性加很多个元素)的源码

Linkedlist集合

双向列表

Linkedlist 添加元素过程的底层源码

Iterator源码

调用.iterator()方法,就是创建一个内部类的对象

泛型

JDK5开始的

只支持引用数据类型

没有泛型的时候,集合怎么存数据的?

直接add皆可,都会被看成是object类型

但是就不能使用集合里元素类型的子类特有方法

泛型好处

泛型其实是伪泛型

Java文件里有写泛型,但是到编译时,即编译成class文件时,集合里面的数还是会被当成object类型处理,只不过,底层还是会将object类型根据泛型强转成对应的类型。

这就是泛型的擦除。

原因:泛型是JDK5才出现的,为了向下兼容,才这样做。

为什么不能写基本数据类型?

因为基本数据类型没得转成object类型,只有写他的包装类,才能转成object类型编译

泛型的使用场景

泛型类

类型不确定时,在定义一个类时就可使用

泛型方法

Public static都是修饰符

E...e是可变参数,用来表示一个或者多个变量,此时e就是一个数组,可以遍历获取里面每一个元素

泛型接口

第一种

第二种

泛型的继承

<>里写什么类型,只能添加什么类型的对象,即使是子类也是不行,泛型没得继承

但是数据是具备继承性的

泛型的通配符

?表示

可以接受Ye Fu,不能接受Zi

总结

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

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

相关文章

HarmonyOS系统开发ArkTS常用组件文本输入及参数

TextInput文本输入组件&#xff0c;用于接收用户输入的文本内容。 1、TextInput组件的参数 TextInput(value?:{placeholder?: string|Resource , text?: string|Resource}) placeholder属性用于设置无输入时的提示文本text用于设置输入框当前的文本内容 Entry Component st…

PieCloudDB Database 3.0 正式发布丨数仓虚拟化流转数据要素

3月14日&#xff0c;拓数派 2024 年度战略暨新产品发布会在上海国际会议中心成功举行。本次大会的主题为「数仓虚拟化 流转数据要素」&#xff0c;吸引了众多业内资深专家和合作伙伴参与&#xff0c;共同探讨数据要素流转和数字技术创新等热门话题。 拓数派创始人兼 CEO 冯雷&…

ArmSoM-Sige RK3588开发板使用手册

Sige7 使用手册&#xff0c;帮助用户了解Sige7的基本使用和需要的准备工作。 当您拿到产品的时候&#xff0c;您需要知道它的型号以及硬件版本&#xff0c;这些信息都可以在板子上的丝印找到。我们会尽可能详细地向您介绍产品的信息。 入门准备​ 在开始使用 ArmSoM-Sige7 之…

探索雨云:AMD EPYC处理器助力香港三网直连

在数字化时代&#xff0c;云计算和数据传输速度成为了商业和科技发展的关键。香港作为国际金融中心和亚太地区的数字枢纽&#xff0c;其网络基础设施的发展备受瞩目。而雨云&#xff08;RainCloud&#xff09;作为一家致力于提供高效稳定云计算服务的领先企业&#xff0c;近日引…

yolov9目标检测可视化图形界面GUI源码

该系统是由微智启软件工作室基于yolov9pyside6开发的目标检测可视化界面系统 运行环境&#xff1a; window python3.8 安装依赖后&#xff0c;运行源码目录下的wzq.py启动 程序提供了ui源文件&#xff0c;可以拖动到Qt编辑器修改样式&#xff0c;然后通过pyside6把ui转成python…

全流程WRF高精度气象模拟技术及在地学领域中的实践应用

随着生态文明建设和“碳中和”战略的持续推进&#xff0c;我国及全球气候变化及应对是政府、科学界及商业界关注的焦点。气候是多个领域&#xff08;生态、水资源、风资源及碳中和等问题&#xff09;的主要驱动因素&#xff0c;合理认知气候变化有利于解释生态环境变化机理及过…

2024跨境品牌出海指南:9大关键要素与注意事项

随着全球经济的不断发展&#xff0c;跨境电商成为品牌拓展国际市场的重要途径。然而&#xff0c;随之而来的是更为激烈的竞争和日益变化的市场环境。2024年&#xff0c;跨境卖家若想成功出海&#xff0c;必须在众多竞争者中脱颖而出。本文Nox聚星将和大家探讨2024年品牌出海过程…

手撕算法-判断是不是完全二叉树

描述&#xff1a;思路&#xff1a;采用层序遍历&#xff0c;找到一个为空的标记&#xff0c;如果后面还有值&#xff0c;就代表不是完全二叉树。代码&#xff1a; public boolean isCompleteTree (TreeNode root) {// write code hereif(root null) return true;Queue<Tree…

第十二届蓝桥杯大赛软件赛决赛C/C++ 研究生组-纯质数

直接判断数据过大 相对而言&#xff0c;由2&#xff0c;3&#xff0c;5&#xff0c;7组成的数更少&#xff0c;则先筛选出由2,3,5,7组成的数&#xff0c;再判断这些数中的质数个数即可 #include <iostream> using namespace std; int main() {printf("1903");…

精准选型!企业CRM系统选型指南携手十大功能解析

大家好我是卡林&#xff0c;今天分享CRM系统的十大功能&#xff0c;企业CRM系统选型指南。说起CRM的功能&#xff0c;大家会联想到什么&#xff1f;数据库、商机管理或者销售漏斗&#xff0c;这些是大部分人都会联想到的功能&#xff0c;但不太全面。如线索管理、联系人管理、客…

日本370公告 各类材质餐具进出口检测 报告出具

食品接触材料指的是在正常使用过程中与食品进行接触的材料&#xff0c;涉及的产品包括&#xff1a;食品包装&#xff0c;餐具、厨具&#xff0c;食品加工机械&#xff0c;厨电产品等&#xff0c;但是由于其在生产过程中使用了一些化学原材料及化学助剂等&#xff0c;使得他们在…

【探索Linux】—— 强大的命令行工具 P.28(网络编程套接字 —— 简单的UDP网络程序模拟实现)

阅读导航 引言一、UDP协议二、UDP网络程序模拟实现1. 预备代码⭕makefile文件⭕打印日志文件⭕打开指定的终端设备文件&#xff0c;并将其作为标准错误输出的目标文件描述符 2. UDP 服务器端实现&#xff08;UdpServer.hpp&#xff09;3. UDP 客户端实现&#xff08;main函数&a…

python问题:vscode切换环境,pip安装库网络错误,不使用anaconda安装库

python问题&#xff1a;vscode切换环境&#xff0c;pip安装库网络错误 vscode切换环境pip安装库网络错误 不使用anaconda安装库 记录一下遇见的python问题。 vscode切换环境 在vscode上面的搜索框输入 > select interpreter然后选择需要的环境。 pip安装库网络错误 用…

cobbler批量装机工具,可以实现同时装多台或多台不同系统的主机,也可以实现定制安装

cobbler批量装机工具 文章目录 cobbler批量装机工具1. cobbler简介2. cobbler服务端部署uos3. 客户端安装(内存和cpu可以多个点&#xff0c;以免后面出错)4.cobbler服务端部署centos75.客户端安装6.cobbler服务端部署centos87.客户端安装8.cobbler服务端部署rockylinux99.客户端…

HarmonyOS NEXT应用开发之Navigation实现多设备适配案例

介绍 在应用开发时&#xff0c;一个应用需要适配多终端的设备&#xff0c;使用Navigation的mode属性来实现一套代码&#xff0c;多终端适配。 效果图预览 使用说明 将程序运行在折叠屏手机或者平板上观看适配效果。 实现思路 本例涉及的关键特性和实现方案如下&#xff1a…

关于 hbuild 真机调试:

当手机插上数据线&#xff0c;刷新&#xff0c;依旧找不到手机列表时&#xff0c;点击“故障排查指南” 参考官网&#xff1a;https://uniapp.dcloud.net.cn/tutorial/run/run-app-faq.html 操作步骤&#xff1a; 1、在手机设置中打开开发者模式&#xff08;根据不同手机打开…

postman进阶功能学习,别再简单的发请求了!

1.Postman数据驱动 想要批量执行接口用例&#xff0c;我们一般会将对应的接口用例放在同一个Collection中&#xff0c;然后再通过Runner批量执行。这种方式适用于接口用例参数固定的情况下&#xff0c;但也存在另一个问题&#xff0c;如果每次运行时&#xff0c;接口参数都在变…

易百纳诚挚邀请,Meetup易百纳技术社区工程师见面会,与您不见不散!

2024年3月29日(周五)&#xff0c;易百纳将携手openEuler社区&#xff0c;南京邮电大学共同举办一场openEuler Embedded Meetup会议。 本次交流活动将邀请多位业内专家围绕嵌入式前沿技术、应用案例、创新方向、芯片开发板优秀实践几个方面进行分享&#xff0c;在活动上还将成立…

在Arm 虚拟硬件(AVH)部署深度学习OCR算法

AI算法的嵌入式部署 AI算法在独立的设备上运行其实就是行业内的嵌入式AI的概念, 大致过程如下: 开发AI模型, 2.对数据集进行处理, 3.训练AI模型并验证效果, 4.转成ONNX格式(ONNX:万金油中间格式,给模型优化和部署带来了更多可能性)或者借助libtorch或者TensorFlow来部署C++版…

Java面试题总结18之springcloud四种分布式事务解决方案

XA规范&#xff1a;分布式事务规范&#xff0c;规定了分布式事务模型 四个角色&#xff1a;事务管理器&#xff08;协调者TM&#xff09;&#xff0c;资源管理器&#xff08;参与者RM&#xff09;&#xff0c;应用程序AP&#xff0c;通信资源管理器CRM 全局事务&#xff1a;一…