list 接口的详解?

list 接口的详解?,第1张

List 接口历亏凳继承了 Collection 接口以定义一个允许重复项的有序集合。该接口不但能够对列表的一部分进行处理,还添加了面向位置的 *** 作。

(1) 面向位置的 *** 作包括插入某个元素或 Collection 的功能,还包括获取、除去或更改元素的功能。在 List 中搜索元素可以从列表的头部或尾部开始,如果找到元素,还将报告元素所在的位置 :

void add(int index, Object element): 在指定位置index上添加元素element

boolean addAll(int index, Collection c): 将集合c的所有元素添加到指定位置index

Object get(int index): 返回List中指定位置的元素

int indexOf(Object o): 返回第一个出现元素o的位置,否则返回-1

int lastIndexOf(Object o) :返回最后一个出现元素o的位置,否则返回-1

Object remove(int index) :删除指定位置上的元素

Object set(int index, Object element) :用元素element取代位置index上的元素,并且返回旧的元素

(2) List 接口不但以位置序列迭代的遍历肢旅整个列表,还能处理集合的子集:

 ListIterator listIterator() : 返回一个列表迭代器,用来访问列表中的元素

 ListIterator listIterator(int index) : 返回一个列表迭代器,用来从指定位置index开始访问列表中的元素

List subList(int fromIndex, int toIndex) :返回从指定位置fromIndex(包含)到toIndex(不包含)范围中各个元素的列表视图

“对子列表的更改(如 add()、remove() 和 set() 调用)对底层 List 也有影响。”

2.1.ListIterator接口

ListIterator 接口继承 Iterator 接口以支持添加或更改底层集合中的元素,还支持双向访问。ListIterator没有当前位置,光标位于调用previous和next方法返回的值之间。一个长度为n的列表,有n+1个有效索引值:

(1) void add(Object o): 将对象o添加到当前位置的前面

 void set(Object o): 用对象o替代next或previous方法访问的上一个元素。如果上次调用后列表结构被修改了,那么将抛出IllegalStateException异常。

(2) boolean hasPrevious(): 判断向后迭代时是否有元素可访问

 Object previous():返回上一个对象

 int nextIndex(): 返回下次调用next方法时将返回的元素的索引

 int previousIndex(): 返回下次调用previous方法时将返回的元素的索引

“正常情况下,不用ListIterator改变某次遍历集合元素的方向 — 向前或者向后。虽然在技术上可以实现,但previous() 后立刻调用next(),返回的是同一个元素。把调用 next()和previous()的顺序颠倒一下,结果相同。”

“我们还需要稍微再解释一下 add() *** 作。添加一个元素会导致新元素立刻被添加到隐式光标的前面。因此,添加元素后调用 previous() 会返回新元素,而调用 next() 则不起作用,返回添加 *** 作之前的下一个元素。”

2.2.AbstractList和AbstractSequentialList抽象类

有两个抽象的 List 实现类:AbstractList 和 AbstractSequentialList。像 AbstractSet 类一样,它们覆盖了 equals() 和 hashCode() 方法以确保两个相等的集合返回相同的哈希码。若两个列表大小相等且包含顺序相同的相同元素,则这两个列表相等。这里的 hashCode() 实现在 List 接口定义空汪中指定,而在这里实现。

除了equals()和hashCode(),AbstractList和AbstractSequentialList实现了其余 List 方法的一部分。因为数据的随机访问和顺序访问是分别实现的,使得具体列表实现的创建更为容易。需要定义的一套方法取决于您希望支持的行为。您永远不必亲自提供的是 iterator方法的实现。

2.3. LinkedList类和ArrayList类

在“集合框架”中有两种常规的 List 实现:ArrayList 和 LinkedList。使用两种 List 实现的哪一种取决于您特定的需要。如果要支持随机访问,而不必在除尾部的任何位置插入或除去元素,那么,ArrayList 提供了可选的集合。但如果,您要频繁的从列表的中间位置添加和除去元素,而只要顺序的访问列表元素,那么,LinkedList 实现更好。

“ArrayList 和 LinkedList 都实现 Cloneable 接口,都提供了两个构造函数,一个无参的,一个接受另一个Collection”

2.3.1. LinkedList类

LinkedList类添加了一些处理列表两端元素的方法。

   (1) void addFirst(Object o): 将对象o添加到列表的开头

void addLast(Object o):将对象o添加到列表的结尾

(2) Object getFirst(): 返回列表开头的元素

Object getLast(): 返回列表结尾的元素

(3) Object removeFirst(): 删除并且返回列表开头的元素

Object removeLast():删除并且返回列表结尾的元素

(4) LinkedList(): 构建一个空的链接列表

LinkedList(Collection c): 构建一个链接列表,并且添加集合c的所有元素

“使用这些新方法,您就可以轻松的把 LinkedList 当作一个堆栈、队列或其它面向端点的数据结构。”

2.3.2. ArrayList类

ArrayList类封装了一个动态再分配的Object[]数组。每个ArrayList对象有一个capacity。这个capacity表示存储列表中元素的数组的容量。当元素添加到ArrayList时,它的capacity在常量时间内自动增加。

在向一个ArrayList对象添加大量元素的程序中,可使用ensureCapacity方法增加capacity。这可以减少增加重分配的数量。

(1) void ensureCapacity(int minCapacity): 将ArrayList对象容量增加minCapacity

(2) void trimToSize(): 整理ArrayList对象容量为列表当前大小。程序可使用这个 *** 作减少ArrayList对象存储空间。

2.3.2.1. RandomAccess接口

一个特征接口。该接口没有任何方法,不过你可以使用该接口来测试某个集合是否支持有效的随机访问。ArrayList和Vector类用于实现该接口。

java.util.List接口 extends Collection接口

        1.有序的集合,存储元素和取出元素的顺序是一致的。

        2.有索引,包含了一些带索引的方法

        3.允许存储重复的元素

        - public void add(int index, E element):将指定的元素吗,添加到该集合中的指定位置上。

        - public E get (int index):返回集合中指定位置的元素。

 梁哪       - public E remove(int index):移除列表中指定位置的元素,返回的是被洞渣则移除的元素。

        - public E set(int index, E element):用指定元素替换集合中指定位置的元素,返回值是更新更新前的元素。

注意:

      纳棚   *** 作索引的时候,一定要防止索引越界异常

        IndexOutOfBoundsException:索引越界异常,集合会报

        ArrayIndexOutOfBoudsException:数组索引越界异常

        StringIndexOutOfBoudsException:字符串索引越界异常

java.util.LinkdList集合 implemets List接口

LinkedList集合的特点:

List接口继承自Collection接口,是单列集合的一个重要分支,习惯性地会将实现了List接口的对象称为List集合。在List集合中允许出现重复的元素,所有的元素是以一种线性方式进行存储的,在程序中可以通首纳过索引(类似于数组中的元索角标)来访问集合中的指定元素。另外,List集合还有一个特点就是元素有序,即元素的存入顺序和取出顺序一致。

List作为Collection集合的子接口,不但继承了Collection 接口中的全部方法,而且还增加了一脊旦些 *** 作集合的特有方法,如表6-2所示。

方法声明功能猫述

void add(int index,Object element)将元素element插入在List集合的指定索引位置

boolean addAll(int index,Collection c)将集合c包含的所有元素插入到List集合的指定索引位置

Object get(int index)返回集合索引index处的元素

Object remove(int index)删除index索引处的元素

Object set(int index, Object element)将索引 index处元素替换成element元素,并将替换后的元素返回

int indexOf(Object o)返回对象o在List集合中首次出现的位置索引

int lastIndexOf(Object o)返回对象o在List集合中最后一次出现的位置索引

List subList(int fromIndex.int toIndex)返回从索引fromIndex(包括)到toIndex(不包括)处所有元素集合组成的子集合

Object[] toArray()将集合元素转换为数组

default void sort(Comparator<? super E>c)根据指定的比较器规则对集合元素排序

上表中列举了List集合中的常用方法,所有的List实现类都可以调用这些方法来对集合元素进行 *** 作。其中sort(Comparator<?super E〉c)方法是JDK 8增加的,用于对集合元素进行排序 *** 作,该方法的参数是者野没一个接口类型的比较器Comparator,可以通过4.6节讲解的Lambda表达式传入一个函数式接口作为参数,来指定集合元素的排序规则。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12334183.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存