List 接口继承了 Collection 接口以定义一个容许重复项的有序集合。该接口不但可以对列
表的一部分进行处理,还添加了面向位置的操做。
(1) 面向位置的操做包括插入某个元素或 Collection 的功能,还包括获取、除去或更改元素
的功能。在 List 中搜索元素能够从列表的头部或尾部开始,若是找到元素,还将报告元素所
在的位置 : java
(2) List 接口不但以位置序列迭代的遍历整个列表,还能处理集合的子集: 数组
ListIterator 接口继承 Iterator 接口以支持添加或更改底层集合中的元素,还支持双向访
问。ListIterator没有当前位置,光标位于调用previous和next方法返回的值之间。一个
长度为n的列表,有n+1个有效索引值: 框架
“正常状况下,不用ListIterator改变某次遍历集合元素的方向 — 向前或者向后。虽然在
技术上能够实现,但previous() 后马上调用next(),返回的是同一个元素。把调用 next()
和previous()的顺序颠倒一下,结果相同。”
dom
咱们还须要稍微再解释一下 add() 操做。添加一个元素会致使新元素马上被添加到隐式光
标的前面。所以,添加元素后调用 previous() 会返回新元素,而调用 next() 则不起做用,
返回添加操做以前的下一个元素。” 函数
有两个抽象的 List 实现类:AbstractList 和 AbstractSequentialList。像 AbstractSet 类
同样,它们覆盖了 equals() 和 hashCode() 方法以确保两个相等的集合返回相同的哈希码。
若两个列表大小相等且包含顺序相同的相同元素,则这两个列表相等。这里的 hashCode() 实
如今 List 接口定义中指定,而在这里实现。
除了equals()和hashCode(),AbstractList和 AbstractSequentialList实现了其他 List 方
法的一部分。由于数据的随机访问和顺序访问是分别实现的,使得具体列表实现的建立更为容
易。须要定义的一套方法取决于您但愿支持的行为。您永远没必要亲自 提供的是 iterator方
法的实现。
测试
在“集合框架 ”中有两种常规的 List 实现:ArrayList 和 LinkedList。使用两种 List 实
现的哪种取决于您特定的须要。若是要支持随机访问,而没必要在除尾部的任何位置插入或除
去元素,那么,ArrayList 提供了可选的集合。但若是,您要频繁的从列表的中间位置添加和
除去元素,而只要顺序的访问列表元素,那么,LinkedList 实现更好。
“ArrayList 和 LinkedList 都实现 Cloneable 接口,都提供了两个构造函数,一个无参的,
一个接受另外一个Collection”
(1)、LinkedList类
LinkedList类添加了一些处理列表两端元素的方法。 spa
“使用这些新方法,您就能够轻松的把 LinkedList 看成一个堆栈、队列或其它面向端点的数
据结构。”
(2)、ArrayList类
ArrayList类封装了一个动态再分配的Object[]数组。每一个ArrayList对象有一个capacity。
这个capacity表示存储列表中元素的数组的容量。当元素添加到ArrayList时,它的capacity
在常量时间内自动增长。
在向一个ArrayList对象添加大量元素的程序中,可以使用ensureCapacity方法增长capacity。
这能够减小增长重分配的数量。对象
(3).、RandomAccess接口
一个特征接口。该接口没有任何方法,不过你可使用该接口来测试某个集合是否支持有效的
随机访问。ArrayList和Vector类用于实现该接口继承