Java学习笔记(17)

news/2024/4/27 17:12:01

集合进阶

单列集合

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

总结

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

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

相关文章

目标检测——PP-YOLO算法解读

PP-YOLO系列&#xff0c;均是基于百度自研PaddlePaddle深度学习框架发布的算法&#xff0c;2020年基于YOLOv3改进发布PP-YOLO&#xff0c;2021年发布PP-YOLOv2和移动端检测算法PP-PicoDet&#xff0c;2022年发布PP-YOLOE和PP-YOLOE-R。由于均是一个系列&#xff0c;所以放一起解…

微服务day05(中) -- ES索引库操作

索引库就类似数据库表&#xff0c;mapping映射就类似表的结构。 我们要向es中存储数据&#xff0c;必须先创建“库”和“表”。 2.1.mapping映射属性 mapping是对索引库中文档的约束&#xff0c;常见的mapping属性包括&#xff1a; type&#xff1a;字段数据类型&#xff0c;…

日志监控之 Grafana+Promtail+Loki

主要解决问题&#xff1a;项目负载均衡后&#xff0c;日志文件分散在多个位置&#xff0c;需要登录主机查看日志文件&#xff0c;在不确定那一个节点记录日志的情况下&#xff0c;很不方便&#xff0c;因此&#xff0c;使用GrafanaPromtailLoki的访问收集到同一个服务上。&…

uni-app打包证书android

Android平台打包发布apk应用&#xff0c;需要使用数字证书&#xff08;.keystore文件&#xff09;进行签名&#xff0c;用于表明开发者身份。 Android证书的生成是自助和免费的&#xff0c;不需要审批或付费。 可以使用JRE环境中的keytool命令生成。 以下是windows平台生成证…

zabbix监控

安装部署 我之前写的&#xff1a;运维06&#xff1a;监控-CSDN博客 自定义监控内容 自定义监控服务器登录的人数 需求&#xff1a;限制登录的人数不超过3个&#xff0c;超过三个就发出报警信息 命令行 1、明确需要执行的linux命令 who | wc -l在 /etc/zabbix/zabbix_agentd…

AI新工具(20240322) 免费试用Gemini Pro 1.5;先进的AI软件工程师Devika;人形机器人Apptronik给你打果汁

✨ 1: Gemini Pro 1.5 免费试用Gemini Pro 1.5 Gemini 1.5 Pro是Gemini系列模型的最新版本&#xff0c;是一种计算高效的多模态混合专家&#xff08;MoE&#xff09;模型。它能够从数百万个上下文Token中提取和推理细粒度信息&#xff0c;包括多个长文档和数小时的视频、音频…