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

相关推荐
不修×蝙蝠5 分钟前
SpringBoot(一)--搭建架构5种方法
java·spring boot·架构·配置·搭建
程高兴38 分钟前
中性点不接地系统单相接地故障Matlab仿真
开发语言·matlab
AI很强43 分钟前
matlab常见的配图代码实现1
开发语言·算法·matlab
FreemanGordon1 小时前
Java volatile 关键字
java
北京_宏哥1 小时前
《手把手教你》系列基础篇(九十三)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-上篇(详解教程)
java·前端·selenium
鲤籽鲲1 小时前
C# Enumerable类 之 数据排序
开发语言·c#·c# 知识捡漏
北京_宏哥1 小时前
《手把手教你》系列基础篇(九十二)-java+ selenium自动化测试-框架设计基础-POM设计模式简介(详解教程)
java·selenium·前端工程化
*.✧屠苏隐遥(ノ◕ヮ◕)ノ*.✧1 小时前
C语言_数据结构总结6:链式栈
c语言·开发语言·数据结构·算法·链表·visualstudio·visual studio
当归10241 小时前
微服务与消息队列RabbitMQ
java·微服务
IT猿手1 小时前
2025最新群智能优化算法:云漂移优化(Cloud Drift Optimization,CDO)算法求解23个经典函数测试集,MATLAB
开发语言·数据库·算法·数学建模·matlab·机器人