IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 源码阅读:list结构体阅读 -> 正文阅读

[Java知识库]源码阅读:list结构体阅读

java.util中list类的代码阅读

list接口是一个有序的接口,使用这个接口用户可以精确控制每个元素在列表中的插入位置。可以通过下标来对元素的位置进行检索

和set不同的是,list是允许集合当中有重复元素的,并且如果这个list集合石允许有null元素存在的,它也允许有多个重复的null元素存在

list结构通常会允许有两个完全相等的结构存在,并且list中是允许有多个null元素存在的。如果你希望自己构建出来的集合中没有重复元素,那就不要使用list这种数据结构

在list接口中有一些比Collection集合更多的额外的规定,同时Collection集合中原有的一些方法:iterator、add、remove、equals、hashcode这几个原来父接口有的方法list作为子接口也是可以直接使用的

list接口提供了四个和操作位置有关的方法去操作它的结构体中的元素,list结构就像arrays数组一样,它的位置计算都是从0下标开始的。
list结构中的一些操作所耗费的时间可能和这个集合中元素的位置在时间上成正比,例如LinkedList这个类。因此,如果调用者不知道实现,则迭代列表中的元素通常比通过它索引更好一些

list接口提供了一个特殊的迭代器,叫做ListIterator,这个ListIterator迭代器可以用来操作插入和替换元素。这个Iterator接口提供除了正向操作还能双向操作,这个方法提供了一种可以获取list的迭代器从一个特殊的指定位置开始迭代访问

list接口提供了2个方法可以用来检索匹配一个对象,但是从性能角度来看,应该谨慎的使用者两个方法。早很多实现中,它们是采用线性搜索的方式来实现的。关于线性查找资料:https://blog.csdn.net/u014494703/article/details/51276361

list接口提供了2个在列表中的任意点进行高效的插入和移除重复元素的方法

注意📢:

虽然允许列表将自身包含为元素,但建议格外小心:equalshashCode 方法不再在此类列表中得到很好的定义,在使用的时候需要特别小心。

在一些list中对它们可能包含的元素有限制。例如,有些实现禁止空元素,有些实现对其元素的类型有限制。尝试添加不合格的元素会引发未经检查的异常,通常是NullPointerExceptionClassCastException
尝试查询不合格元素的存在可能会引发异常,或者它可能只是返回 false;一些实现会表现出前一种行为,而另一些会表现出后者。
更一般地,尝试对不合格元素进行操作,其完成不会导致将不合格元素插入到列表中,这可能会引发异常,也可能会成功,这取决于实现的选择。此类异常在此接口的规范中被标记为“可选”。

list集合中继承了Collection接口中的方法有:
(1)int size();
(2)boolean isEmpty();
(3)boolean contains(Object o);
(4)Iterator iterator();
(5)Object[] toArray();
(6) T[] toArray(T[] a);
(7)boolean add(E e);
(8)boolean remove(Object o);
(9)boolean containsAll(Collection<?> c);
(10)boolean addAll(Collection<? extends E> c);
(11)boolean addAll(int index, Collection<? extends E> c);
(12)boolean removeAll(Collection<?> c);
(13)boolean retainAll(Collection<?> c);

replaceAll方法:这个方法的具体实现也可看ArrayList中的replaceAll实现。

  • 需要传入的替换元素不能为空,对象不能为空的判空方法: Objects.requireNonNull(operator);
  • 这个被替换的list必须是一个final的list,意味着这个list本身是不变化的
  • 如果被替换的list中还有下一个元素,则将下一个元素进行替换,替换时候传入的值就是目标值。

list中的sort排序方法的说明:
1.这个排序方法是根据指定的顺序来进行排序
2.这个list列表中的所有元素必须使用指定的比较器进行相互比较,不得为任何一个元素抛出ClassCastException
3.如果指定的比较器是null,那么这个列表中所有元素都必须实现Compare接口,并且应该用元素的 Comparable的自然排序
4.此列表必须是可修改的,但不需要调整大小。
5.默认实现获取包含此列表中所有元素的数组,对数组进行排序,并遍历此列表,从数组中的相应位置重置每个元素。 (这避免了由于尝试对链表进行排序而导致的 n2 log(n) 性能。)
6.此实现是一种稳定的、自适应的、迭代的归并排序,当输入数组部分排序时,它需要远少于n次 lg(n) 比较,同时在输入数组随机排序时提供传统归并排序的性能。如果输入数组接近排序,则实现需要大约n次比较。临时存储要求从几乎排序的输入数组的小常数到随机排序的输入数组的 n2 对象引用不等。
7.该实现在其输入数组中同等地利用升序和降序,并且可以在同一输入数组的不同部分利用升序和降序。它非常适合合并两个或多个排序数组:只需连接数组并对结果数组进行排序。

关于list中的迭代器的实现:
ListIterator listIterator();
关于list的截断:
List subList(int fromIndex, int toIndex); 阶段list的方法:fromIndex是截断开始的位置,toIndex是截断结束的位置

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-03-24 00:21:19  更:2022-03-24 00:21:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:07:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码