Java集合(List篇)

news/2024/9/22 11:46:51/

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.ppmy.cn/news/1528796.html

相关文章

蓝桥杯【物联网】零基础到国奖之路:九. I2C

蓝桥杯【物联网】零基础到国奖之路:九. I2C 第一节 I2C概念第二节 I2C的物理层第三节 I2C的协议层 第一节 I2C概念 中文叫集成电路总线&#xff0c;是一种串行通信总线&#xff0c;使用多主从架构&#xff0c;由飞利浦公司1980年代初设计&#xff0c;方便主板、嵌入式系统或手…

《机器学习by周志华》学习笔记-神经网络-02感知机与多层网络

1、感知机 1.1、概念 感知机(Perceptron)由2层神经元模型组织,如下图所示: 「输入层神经元」接收外界输入信号后,传递给「输出层神经元 」 「输出层神经元」是「M-P神经元」,亦称「阈值逻辑单元(threshold logic unit)」 1.2、作用 「感知机」能够容易的实现逻辑「与…

某采招网爬虫数据采集逆向

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 目标网站 aHR0cHM6Ly9zZWFyY2guYmlkY2VudGVyLmNvbS5jbi9zZWFyY2g/a2V5d29yZHM9JWU0…

网络安全:腾讯云智、绿盟、美团、联想的面经

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…

剩余参数运算符的babel转义配置

记一次生产构建的报错 uncaught syntaxerror: unexpected token ... 背景 在处理展示markdown文本功能&#xff0c;并且其中的代码高亮功能时&#xff0c;引入了两个第三发的依赖包marked 和 highlight.js &#xff0c;本地功能调试正常之后&#xff0c;一如即往的没有build…

基于SpringBoot+Vue的考研百科网站系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目源码、Python精…

Linux_openEuler_24.03部署Oracle 19c部署安装实测验证(无图形桌面-RPM模式)

前言&#xff1a; 近期对openeuler有点兴趣&#xff0c;顺带在做个开发数据仓项目&#xff0c;那就正好安装个环境做个调测&#xff0c;做个记录放上来做个备录给到大家参考。 openEuler 24.03 LTS&#xff1a;四大升级&#xff0c; 首个AI原生开源操作系统正式发布 openEuler …

波士顿机器人滑环的技术特点与应用前景

机器人滑环在现代自动化和机器人技术中扮演着至关重要的角色。作为一种关键的机械组件&#xff0c;滑环允许机器人在旋转和移动的过程中保持稳定的电信号和数据传输。波士顿机器人滑环作为行业中的领先产品&#xff0c;具有多项独特的技术特点和优势&#xff0c;为各种机器人系…