Java集合(List篇)

List

a.使用List

        i.最基础的一种集合,是一种有序列表,内部按照放入元素的先后顺序存放,每个元素都可以通过索引确定自己的位置。
        ii.数组的删除和新增

        iii.ArrayList集合的新增和删除。

        iv.LinkedList(链表式集合)
                1.内部的每个元素都指向下一个元素。

                2.比较一下ArrayList和LinkedList,优先使用ArrayList。

b.特点

        i.允许重复添加。
        ii.允许添加null。

c.创建List

        i.除了使用ArrayList和LinkedList,还可通过List接口提供of()方法,不可以添加null值,会报空指针异常。

d.遍历List

        i.使用for循环,get(索引)方法只有ArrayList的实现是高效的,换成LinkedList后,索引越大,访问速度越慢。
        ii.始终坚持使用Iterator(迭代器)来访问List。Iterator本身也是一个对象,但它是由List的实例调用iterator()方法的时候创建的。Iterator对象知道如何遍历List,并且不同的List类型,返回的Iterator对象也是不同的,但总是拥有最高的访问效率。
        iii.Iterator对象有两个方法:hashNext()判断是否有下一个元素,next()返回下一个元素。由于Iterator遍历很常用,所以Java的for each循环本身就可以帮我们使用Iterator遍历。直接使用Iterator遍历编译器会提示使用foreach。

        iv.只要实现了Iterable接口的集合类都可以直接使用for each循环来遍历,Java编译器本身不知道如何遍历集合对象,但它会自动把for each循环变成Iterator的调用,原因在于Iterable接口中定义了一个Iterator<E> iterator()方法,强迫集合类必须返回一个 Iterator对象。

e.List和Array转换

        i.List转换成Array,三种方式。
                1.调用toArray()方法直接返回一个Object[]数组,会丢失类型信息,应用很少。
                2.给toArray(T[])传入一个类型相同的Array,List内部自动把元素复制到传入的Array中。
                3.简洁写法,函数式,是通过List接口定义的T[] toArray(IntFunction<T[]> generator)方法。

        ii.Array转换成List,由于返回的不确定是哪个具体的集合类,是一个List接口,所以List是只读的。
                1.List.of(E... elements)
                2.Arrays.asList(T... a)

编写equals方法

a.contains(Object o)和indexOf(Object o)方法

        i.两个不同的实例,比较的是引用类型的值。
        ii.List内部并不是通过==判断两个元素是否相等,而是使用equals()判断。因此要正确使用List的contains(),indexOf()这些方法,放入的实例必须正确覆写equals()方法,否则放进去的实例查找不到。可以正常放入String,Integer这些对象,是因为Java标准库已经正确实现了equals()方法。

        iii.自己编写Person实例,没有重写equals方法,直接使用这两个方法。

2.编写equals方法

        i.条件
                1.自反性(Reflexive):对于非null的x来说,x.equals(x)必须返回true;
                2.对称性(Symmetric):对于非null的x和y来说,如果x.equals(y)为true,则y.equals(x)也必须为true;
                3.传递性(Transitive):对于非null的x,y,z来说,如果x.equals(y)为true,y.equals(z)也为true,那x.equals(z)也必须为true;
                4.一致性(Consistent):对于非null的x,y来说,只要x,y状态都不变,则x.equals(y)总是一致的返回true和false;
                5.对null的比较:x.equals(null)永远返回false。
        ii.样例

        iii.总结
                1.先确定实例“相等”的逻辑,即哪些字段相等,就认为实例相等。
                2.用instanceof判断传入的待比较Object是不是当前类型,如果是,比较字段,否则,返回false。
                3.引用类型用Objects.equals()比较,基本类型直接用==比较。
                4.两个引用类型都是nul时它们也是相等的。

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

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

相关文章

Ceph 基本架构(一)

Ceph架构图 Ceph整体组成 Ceph 是一个开源的分布式存储系统&#xff0c;设计用于提供优秀的性能、可靠性和可扩展性。Ceph 的架构主要由几个核心组件构成&#xff0c;每个组件都有特定的功能&#xff0c;共同协作以实现高可用性和数据的一致性。 以下是 Ceph 的整体架构及其…

Tomcat CVE-2017-12615 靶场攻略

漏洞描述 当 Tomcat运⾏在Windows操作系统时&#xff0c;且启⽤了HTTP PUT请求⽅法&#xff08;例如&#xff0c;将 readonly初始化参数由默认值设置为false&#xff09;&#xff0c;攻击者将有可能可通过精⼼构造的攻击请求数据包向服务器上传包含任意代 的 JSP ⽂件&#xf…

队列基础概念

文章目录 &#x1f34a;自我介绍&#x1f34a;现实生活中的例子&#x1f34a;队列的介绍&#x1f34a;循环队列&#x1f34a;小结 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以&#xff1a;点赞关注评论收藏&#xff08;一键四连&#xff09;哦~ &#x1f34a;自我介…

LeetCode[中等] 54.螺旋矩阵

给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 思路&#xff1a;定义方向数组&#xff0c;按照顺时针顺序&#xff1a;右(0,1)&#xff0c;下(1,0)&#xff0c;左(0,-1)&#xff0c;上(0,-1) 从矩阵的左上角开始遍历…

了解深度学习,张量,线性代数,激活函数的概念

在人工智能领域&#xff0c;尤其是深度学习中&#xff0c;张量和线性代数是不可或缺的数学工具。这些数学知识的应用主要体现在以下几个方面&#xff1a; 数据表示与运算&#xff1a;张量是多维数组&#xff0c;用于表示和存储数据。在深度学习中&#xff0c;大部分的数据和权重…

常见项目场景题1(数据量很大时如何去重,实现超时处理)

数据很多&#xff0c;限制内存&#xff0c;如何去重 对于大数据量去重的场景&#xff0c;我们可以考虑使用位图(Bitmap) Bitmap 是使用二进制来表示某个元素是否存在的数组。用0和1来表示存在与不存在 使用Bitmap的话&#xff0c;一个数字占用1bit&#xff0c;大大减少内存消耗…

Unity自我实现响应式属性

其实只是写着玩,响应式编程建议使用UniRx插件(一套成熟的响应式编程解决方案),我写的主要是借鉴一下这个思想,实现的也不够优雅,不过逻辑也算严密可以正常使用.你可以查看我写的理解响应式属性的思想. 借鉴UniRx的ReactiveProperty类,且UniRx不仅有响应式属性. using System; …

CertiK协助修复Solana大整数模幂运算中的DOS漏洞

导读&#xff1a; 本文深入探讨了区块链交易费⽤模型的重要性及其在确保网络安全和有效运行中的关键作用。通过对以太坊和Solana区块链网络的交易费⽤模型进行比较分析&#xff0c;揭示了不安全的交易计费可能引发的网络安全风险。特别关注了CertiK团队发现并协助修复的Solana…

【学术会议征稿】第四届计算机、信息工程与电子材料国际学术会议 (CTIEEM 2024)

第四届计算机、信息工程与电子材料国际学术会议 (CTIEEM 2024) The 4th International Conference on Computer Technology, Information Engineering and Electron Materials 随着信息技术的迅猛发展&#xff0c;计算机技术、信息工程以及电子材料领域的研究与创新成为推动现…

光伏设计软件的基本功能

一、屋顶绘制 光伏设计软件的首要功能是屋顶绘制。通过直观易用的界面&#xff0c;可以轻松绘制出建筑物的屋顶轮廓、结构细节等基本信息。软件支持多种屋顶类型的绘制&#xff0c;并允许用户自定义屋顶尺寸和形状。 二、参照物、障碍物放置 在光伏系统设计中&#xff0c;参照…

linux如何对c++进行内存分析

linux如何对c进行内存分析 背景分析方法以及原理原理分析结果以及重点关注 背景 在工作中&#xff0c;我遇到一个问题&#xff0c;需要将c写的进程部署到MCU上。由于MCU上可用的RAM 非常有限&#xff0c;所以在部署时就需要考虑到使用内存大小。所以为了搞清楚&#xff0c;内存…

go注册中心Eureka,注册到线上和线下,都可以访问

go注册中心Eureka&#xff0c;注册到线上和线下&#xff0c;都可以访问 本地通过127访问&#xff0c; 线上通过内网ip访问 package mainimport ("github.com/SimonWang00/goeureka""github.com/gin-gonic/gin""wbGo/controller""wbGo/task…

论文阅读 - MDFEND: Multi-domain Fake News Detection

https://arxiv.org/pdf/2201.00987 目录 ABSTRACT INTRODUCTION 2 RELATED WORK 3 WEIBO21: A NEW DATASET FOR MFND 3.1 Data Collection 3.2 Domain Annotation 4 MDFEND: MULTI-DOMAIN FAKE NEWS DETECTION MODEL 4.1 Representation Extraction 4.2 Domain Gate 4.…

机房动力环境监控系统组成

机房动力环境监控系统已经广泛应用于各种类型的机房,尤其稍微重要的机房,都需要做环境监控系统,因此我们要熟知这个系统,如果你还不懂的话,可以看看这篇文章。 一、动环系统简介 计算机系统数量与日俱增,其配套的环境设备也日益增多,计算机房已成为各大单位的重要组成…

线性规划中可行域为什么一定是凸的--证明

线性规划中的凸性证明 线性规划中可行域是凸的&#xff0c;这是自然能够想到和容易理解的道理。直观上&#xff0c;线性约束定义的可行域是由半平面的交集构成的&#xff0c;这些半平面的交集总是形成凸区域。 这么一个自然想到、容易理解的道理&#xff0c;怎么从数学上完备…

计算机毕业论文题目:设计与实现一个校园通知信息系统

设计与实现一个校园通知信息系统是一个涉及多个方面的复杂项目&#xff0c;它旨在提高信息传递的效率和准确性&#xff0c;确保学生、教师以及学校管理人员能够及时获取到重要的通知信息。以下是关于如何设计并实现这样一个系统的详细说明&#xff1a; 1. 需求分析 用户…

在Spring项目中,两个实用的工具(生成类与映射文件、API自动生成)

尊贵的Spring玩家&#xff0c;是不允许动脑思考的&#xff0c;所以我们要学会复制粘贴 1.生成类与映射文件 背景&#xff1a;在项目编写初期&#xff0c;我们已经设计好了表&#xff0c;后面就需要根据表来撰写实体类(model)和对应的sql语句(dao和mapper)。如果一个项目中&…

可视化数据分析收集软件Splunk Enterprise for Mac

Splunk Enterprise for mac 是一款强大的机器数据平台软件&#xff0c;具有以下特点和优势&#xff1a; 软件下载地址 一、功能强大的数据处理能力 专为收集、整理、搜索、分析和监控各种类型或来源的机器数据而设计&#xff0c;能够实时处理大量的机器生成数据&#xff0c;…

【PyTorch】张量操作与线性回归

张量的操作 Tensor Operation 拼接与切分 1.1 torch.cat() torch.cat(tensors, dim0, outNone)功能&#xff1a;将张量按维度dim进行拼接 tensors&#xff1a;张量序列dim&#xff1a;要拼接的维度 1.2 torch.stacok() torch.stack(tensors, dim0, outNone)功能&#xf…

java自定义线程池详解

目录 线程池使用线程池的目的线程池工作原理线程池常用方法自定义线程池等待队列拒绝策略线程工厂 线程池 使用线程池的目的 资源复用&#xff0c;降低开销。重复利用已创建的线程&#xff0c;避免线程频繁地创建和销毁带来的性能开销。方便线程的可管理性。线程是稀缺资源&a…