当前位置: 首页 > news >正文

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时它们也是相等的。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • fiddler抓包06_抓取https请求(chrome)
  • 财富通公司开发维修售后小程序,解决售后维修问题
  • 【摘抄】软件工程师认知
  • 量子噪声流加密(一:整体框架描述)
  • 惠海H6118 DC-DC 降压恒流芯片30V36v40V48V降12V9V24V36V 1.2A大电流 调光降压芯片IC舞台灯
  • 学习CubeIDE——外设中断开发
  • 活动目录安全
  • go注册中心Eureka,注册到线上和线下,都可以访问
  • 聊聊Thread Local Storage
  • uni-app页面调用接口和路由(四)
  • 【ShuQiHere】 探索计算机视觉的世界:从基础到应用
  • 在线安全干货|如何更改IP地址?
  • 2024年最新苹果cms升级插件【泛目录专用】
  • 笔记整理—内核!启动!—linux应用编程、网络编程部分(1)API概述与文件I/O
  • 是德科技Keysight N4433D ECal模块 26.5GHz 4端口3.5毫米
  • [译] 怎样写一个基础的编译器
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 11111111
  • Android交互
  • Android系统模拟器绘制实现概述
  • es6
  • ES6系列(二)变量的解构赋值
  • idea + plantuml 画流程图
  • Intervention/image 图片处理扩展包的安装和使用
  • Java反射-动态类加载和重新加载
  • js面向对象
  • maven工程打包jar以及java jar命令的classpath使用
  • mockjs让前端开发独立于后端
  • MySQL数据库运维之数据恢复
  • Sequelize 中文文档 v4 - Getting started - 入门
  • socket.io+express实现聊天室的思考(三)
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • Vue组件定义
  • Webpack 4x 之路 ( 四 )
  • 汉诺塔算法
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 记一次和乔布斯合作最难忘的经历
  • 码农张的Bug人生 - 初来乍到
  • 如何在 Tornado 中实现 Middleware
  • 入门到放弃node系列之Hello Word篇
  • 使用 Docker 部署 Spring Boot项目
  • 算法-图和图算法
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (~_~)
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (C语言)字符分类函数
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (pojstep1.1.2)2654(直叙式模拟)
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)