https://docs.oracle.com/javase/8/docs/api/java/util/List.html

  public interface List<E> extends Collection<E>

  E是List管理的元素类型。

  父接口:Collection<E>, Iterable<E>

  实现类:ArrayList、LinkedList、Stack、Vector 、RoleList

  一、简介

  List是一个有序集合,也称为顺序表。

  接口的用户可以精确控制元素插入List到中的位置,也可以通过位置下标直接访问元素。

  List通常允许包含重复的元素,如果允许null元素,那么也可以包含重复的null元素。

  List提供了4种方法来通过位置索引访问元素。与数组一样,位置索引从0开始。

  如果调用者不知道具体List的实现,遍历(迭代)List中的元素通常是更好的选择。(时间开销对不同的实现有不同。)

  List接口提供了一个特殊的迭代器,叫ListIterator。除了有Iterator接口中的迭代器的常规功能外,它还允许元素插入、替换和进行双向访问。List还能提供一个从指定位置开始的ListIterator。

  List接口提供了两种方法来查询特定的元素,从性能的角度来看,应该谨慎使用它们,因为在很多实现类中这将执行代价昂贵的线性搜索。

  List提供了两种方法来从任意位置进行多个元素的插入和删除。

  需要注意的是,如果一个List实现类允许将自身作为集合元素,equals()方法和hashcode()方法就不能被很好地定义了。

  该接口是Java Collections Framwork的一员。(所以之前是理解错了,并不是所有相关接口都是其中的一员…)

  二、方法

  基本方法与Set中的方法差不多,考虑到List是有序集合,所以通过方法得到的迭代器、数组中的元素都是有序的。

  介绍特殊的方法:

  1、default void replaceAll(UnaryOperator<E> operator)

  UnaryOperator<E>是一个功能性(Function)接口,表示一个输入输出的是同一类型的一元运算符(如++)。

  这个方法表示什么呢?即把operator代表的一元操作,应用到List集合中的每一个元素上,然后取代原来的元素。

final ListIterator<E> li = list.listIterator();
while (li.hasNext()) {
li.set(operator.apply(li.next()));
}
/*如果 list's list-iterator不支持set操作,会引发异常*/
/*If the list's list-iterator does not support the set operation then an UnsupportedOperationException will be thrown when replacing the first element.*/

  2、default void sort(Comparator<? super E> c)

  根据指定的Comparator(比较器)对List集合中的元素进行排序。

  所以前提是集合中的元素,相互之间可以用这个Comparator进行比较。(that is, c.compare(e1, e2) must not throw a ClassCastException(类型强制转换异常) for any elements e1 and e2 in the list)

  如果指定的比较器为null,则此列表中的所有元素必须实现Comparable接口,并且应该使用元素的自然顺序(natural ordering)。

  This list must be modifiable, but need not be resizable.

  注意:

  This implementation is a stable, adaptive, iterative mergesort that requires far fewer than nlg(n) comparisons

  3、boolean equals(Object o)

  如果两个List集合包含的元素相同,且元素的顺序相同,则称这两个list相等~

  4、int hashcode()

  一个List集合的hashcode是按如下定义计算的:

int hashCode = 1;
for (E e : list)
hashCode = 31*hashCode + (e==null ? 0 : e.hashCode());

  这样可以确保equals()相等的两个list的hashcode也相等,如object类中hashcode规约所要求的那样。

  5、E get(int index)

  Throws: IndexOutOfBoundsException - if the index is out of range (index < 0 || index >= size())

  根据这个异常的提示,我确认了集合没有“容量大小”的概念,size()返回的是存在的元素个数,且index基于0。

  6、E set(int index, E element)

  可选操作(总算搞懂了可选操作的含义,即实现类未必支持这个操作,如果不支持时就会报错UnsupportedOperationException)。

  

  7、void add(int index, E element)

  可选操作。

  在指定位置插入指定元素,然后就该位置原来的以及后面的元素右移一位。

  8、E remove(int index)

  可选操作。

  移除并返回指定位置的元素,然后将后面的元素前移。

  9、int indexof(Object o)

  返回此List中指定元素第一次出现的索引,如果此列表不包含元素,则返回-1。

  10、int lastIndexOf(Object o)

  返回此List中指定元素最后一次出现的索引,如果此列表不包含元素,则返回-1。

  11、ListIterator<E> listIterator()

  返回此List中元素的list 迭代器(按正确的顺序)

  12、ListIterator<E>  listIterator(int index)

  返回的list迭代器从指定位置开始。即第一次调用next()方法返回index索引处的元素,而第一次调用previous()方法返回index-1索引处的元素。

  (ListIterator<E>接口,了解一下)

  13、List<E> subList(int fromIndex, int toIndex)

  返回该List的一个视图,即它的子list。

  这个子list是由源list支持的,所以对子list的非结构性修改,也会应用到源list;反之亦然。

  子list同支持在源list中支持的“可选操作”。

  

  如果源list,通过其它方式而不是通过子list,进行了结构性修改,那么此方法返回的子list的语义也变得模糊(???)

  什么是“结构性修改”呢?

  Structural modifications are those that change the size of this list, or otherwise perturb it in such a fashion that iterations in progress may yield incorrect results

  

  14、default Spliterator<E> spliterator()

  因为没理解这个方法所有我又写了。

  

  

Collection接口的子接口——List接口的更多相关文章

  1. 16、Collection接口及其子接口Set和List(常用类LinkedList,ArrayList,Vector和Stack)

    16.Collection接口 Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements).一些Collection允许相同 ...

  2. C#构造方法(函数) C#方法重载 C#字段和属性 MUI实现上拉加载和下拉刷新 SVN常用功能介绍(二) SVN常用功能介绍(一) ASP.NET常用内置对象之——Server sql server——子查询 C#接口 字符串的本质 AJAX原生JavaScript写法

    C#构造方法(函数)   一.概括 1.通常创建一个对象的方法如图: 通过  Student tom = new Student(); 创建tom对象,这种创建实例的形式被称为构造方法. 简述:用来初 ...

  3. java 数据类型:集合接口Collection之队列Queue:PriorityQueue ;Dequeue接口和ArrayDeque实现类:

    什么是Queue集合: Queue用于模拟队列这种数据结构,队列通常是"先进先出"(FIFO)的容器.队列的头部保存在队列中存放时间最长的元素,尾部保存存放时间最短的元素.    ...

  4. Java面向对象之 接口: [修饰符] interface 接口名 {...};子接口:[修饰符] interface 接口名 extends 父接口,父接口2...{...}

    1.什么是接口? 类比抽象类,把功能或者特性类似的一类 抽象的更彻底,可以提炼出更加特殊的"抽象类"----接口 2.如何定义接口 语法:  [修饰符] interface 接口名 ...

  5. Java基础 TreeSet()来实现数组的【定制排序】 : Comparable接口(自然排序) 或者 Comparator接口 (定制排序)

    笔记: //排序真麻烦!没有C++里的好用又方便!ORZ!ORZ!数组排序还还自己写个TreeSet()和( Comparable接口(自然排序) 或者 Comparator接口 (定制排序))imp ...

  6. Java基础进阶:多态与接口重点摘要,类和接口,接口特点,接口详解,多态详解,多态中的成员访问特点,多态的好处和弊端,多态的转型,多态存在的问题,附重难点,代码实现源码,课堂笔记,课后扩展及答案

    多态与接口重点摘要 接口特点: 接口用interface修饰 interface 接口名{} 类实现接口用implements表示 class 类名 implements接口名{} 接口不能实例化,可 ...

  7. Java基础-接口中国特色社会主义的体制中有这样的现象:地方省政府要坚持党的领导和按 照国务院的指示进行安全生产。请编写一个java应用程序描述上述的体制现象。 要求如下: (1)该应用程序中有一个“党中央”接口:CentralPartyCommittee,该接口中 有个“坚持党的领导”方法:void partyLeader() (2)该应用程序中有一个“国务院”抽象类:StateCouncil,

    36.中国特色社会主义的体制中有这样的现象:地方省政府要坚持党的领导和按 照国务院的指示进行安全生产.请编写一个java应用程序描述上述的体制现象. 要求如下: (1)该应用程序中有一个“党中央”接口 ...

  8. C#接口的使用场合,接口应用

    当一个项目不断的扩大的时候,会面临的问题是不断的有以下情况: 1.以前编写程序的人离职了,新来的程序员看不懂以前的程序,或者觉得以前的程序部够好,但又不希望删除: 2.当实现第三方接口时,如:读写IC ...

  9. Surface Pro 4 和 Surface Book 使用名为 Surface UEFI(统一可扩展固件接口)的新固件接口

    Surface Pro 4 和 Surface Book 使用名为 Surface UEFI(统一可扩展固件接口)的新固件接口.Surface UEFI 提供新功能,如启动更快速.安全性更高.可替换 ...

  10. Delphi接口的底层实现(接口在内存中仍然有其布局,它依附在对象的内存空间中,有汇编解释)——接口的内存结构图,简单清楚,深刻 good

    引言 接口是面向对象程序语言中一个很重要的元素,它被描述为一组服务的集合,对于客户端来说,我们关心的只是提供的服务,而不必关心服务是如何实现的:对于服务端的类来说,如果它想实现某种服务,实现与该服务相 ...

随机推荐

  1. 「UVA12293」 Box Game

    题目链接 戳我 \(Solution\) 这道题第一眼看样例,猜了个结论偶数\(Alice\)赢,否则\(Bob\)赢,打了一发,交了上去果不其然的\(wa\)了,第二次猜\(2\)的幂次方\(Ali ...

  2. 记一次zipkin和spring cloud bus冲突

    问题表现spring boot 版本 2.0.6spring cloud 版本 Finchley.SR2 使用spring-cloud-starter-zipkin + 独立部署的zipkin 进行链 ...

  3. Spring常用的jar+普通构造注入

    常用工具 jar 说明 提供AOP(面向切面编程)实现:spring -aop spring提供对AspectJ框架的整合:spring-aspects 提供 IoC(控制反转)的基础实现:sprin ...

  4. 在mac上如何用safari调试ios手机的移动端页面

    第一步:打开iphone手机的开发者模式,流程是:[设置]->[Safari]->[高级]->开启[Web检查器] ,如图1.图2 图1 图2第二步:打开Mac上Safari的开发者 ...

  5. linux安装软件时/usr/lib/python2.7/site-packages/urlgrabber/grabber.py文件异常

    linux安装软件时,经常出现以下异常信息 Traceback (most recent call last): File , in <module> main() File , in m ...

  6. 没有安装zip引发的一系列安装

    安装一个php框架的时候提示不能在线解压缩 通过phpinfo查看没有加载zip扩展,安装开始. 先安装了一次发现不能make,,,什么情况!!! 提示这个错误,好吧解决.make: *** No t ...

  7. 本地oracle可以通过localhost连接,无法通过ip地址连接解决方法,oracle远程连接配置

    Oracle11g安装后只有本地可以连接,远程无法连接,而且本地只能配置成localhost配置成IP地址也无法连接. 这是因为安装oracle的时候没有配置远程的监听,默认的监听是localhost ...

  8. [go]go环境安装-解决安装包不能访问golang.org问题

    安装go和vscode vscode插件列表选择go,安装即可,其他插件暂不安装 手动安装一些vscode配套的调试工具等 直接vscode-go,然后点下面的go-tools就能找到 go get ...

  9. 阶段3 3.SpringMVC·_05.文件上传_5 文件上传之跨服务器上传分析和搭建环境

    使用这个jar包来跨服务器上传 搞两个tomcat.一个springmvc一个fileupload 选中tomcat server点击左边的加号 需要改端口和JMX pport这个端口 部署文件上传的 ...

  10. c# 匿名类型获取值

    代码片段: 读取 new{ ....} 方法1:转换为json对象 dynamic model = SaleOrderServices.GetGiftOrderById(WebHelper.GetQu ...