改变容器的大小;1.3.2常用方法;List就是列表的意思,它是Collection;面向位置的操作包括插入某个元素或Collecti;?voidadd(intindex,Object;x上;?booleanaddAll(intindex,;加容器collection中所有的元素;?Objectget(intindex):取出下;?intindexOf(Ob
改变容器的大小。下面我们先看看List接口的一些常用方法。 1.3.2 常用方法 List 就是列表的意思,它是Collection 的一种,即继承了 Collection 接口,以定义一个允许重复项的有序集合。该接口不但能够对列表的一部分进行处理,还添加了面向位置的操作。List 是按对象的进入顺序进行保存对象,而不做排序或编辑操作。它除了拥有Collection接口的所有的方法外还拥有一些其他的方法。 面向位置的操作包括插入某个元素或 Collection 的功能,还包括获取、除去或更改元素的功能。在 List 中搜索元素可以从列表的头部或尾部开始,如果找到元素,还将报告元素所在的位置。 void add(int index, Object element) :添加对象element到位置inde x上 boolean addAll(int index, Collection collection) :在index位置后添 加容器collection中所有的元素 Object get(int index) :取出下标为index的位置的元素 int indexOf(Object element) :查找对象element 在List中第一次出 现的位置 int lastIndexOf(Object element) :查找对象element 在List中最后出 现的位置 Object remove(int index) :删除index位置上的元素 Object set(int index, Object element) :将index位置上的对象替换为 element 并返回老的元素。 先看一下下面表格:
ListArrayListLinkedList。使用两种 List 实现的哪一种取决于您特定的需要。如果要支持随机访问,而不必在除尾部的任何位置插入或除去元素,那么,Arr ayList 提供了可选的集合。但如果,您要频繁的从列表的中间位置添加和除去元素,而只要顺序的访问列表元素,那么,LinkedList 实现更好。 我们以ArrayList 为例,先看一个简单的例子: 例子中,我们把12个月份存放到ArrayList 中,然后用一个循环,并使用get()方法将列表中的对象都取出来。 而LinkedList 添加了一些处理列表两端元素的方法(下图只显示了新方法): 使用这些新方法,您就可以轻松的把 LinkedList 当作一个堆栈、队列或其它面向端点的数据结构。 我们再来看另外一个使用LinkedList 来实现一个简单的队列的例子: import java.util.*; public class ListExample { public static void main(String args[]) { LinkedList queue = new LinkedList(); queue.addFirst("Bernadine"); queue.addFirst("Elizabeth"); queue.addFirst("Gene"); queue.addFirst("Elizabeth"); queue.addFirst("Clara"); System.out.println(queue); queue.removeLast(); queue.removeLast(); System.out.println(queue); } } 运行程序产生了以下输出。请注意,与 Set 不同的是 List 允许重复。 [Clara, Elizabeth, Gene, Elizabeth, Bernadine] [Clara, Elizabeth, Gene] 该的程序演示了具体 List 类的使用。第一部分,创建一个由 ArrayList 支持的 List。填充完列表以后,特定条目就得到了。示例的 LinkedList 部分把 LinkedList 当作一个队列,从队列头部添加东西,从尾部除去。 List 接口不但以位置友好的方式遍历整个列表,还能处理集合的子集: ListIterator listIterator() :返回一个ListIterator 跌代器, 默认开始位置为0 ListIterator listIterator(int startIndex) :返回一个ListIterat or 跌代器,开始位置为startIndex List subList(int fromIndex, int toIndex) :返回一个子列表 List ,元素存放为从 fromIndex 到toIndex之前的一个元素。 处理 subList() 时,位于 fromIndex 的元素在子列表中,而位于 toIndex 的元素则不是,提醒这一点很重要。以下 for-loop 测试案例大致反映了这一点: for (int i=fromIndex; i<toIndex; i++) { // process element at position i } 此外,我们还应该提醒的是:对子列表的更改(如 add()、remove() 和 set() 调用)对底层 List 也有影响。 ListIterator 接口 ListIterator 接口继承 Iterator 接口以支持添加或更改底层集合中的元素,还支持双向访问。 以下源代码演示了列表中的反向循环。请注意 ListIterator 最初位于列表尾之后(list.size()),因为第一个元素的下标是0。 List list = ...; ListIterator iterator = list.listIterator(list.size()); while (iterator.hasPrevious()) { Object element = iterator.previous(); // Process element } 正常情况下,不用 ListIterator 改变某次遍历集合元素的方向 — 向前或者向后。虽然在技术上可能实现时,但在 previous() 后立刻调用 next(),返回的是同一个元素。把调用 next() 和 previous() 的顺序颠倒一下,结果相同。 我们看一个List的例子: import java.util.*;
public class ListIteratorTest {
public static void main(String[] args) { List list = new ArrayList();
始
下标
} list.add("aaa"); list.add("bbb"); list.add("ccc"); list.add("ddd"); System.out.println("下标0开始:"+list.listIterator(0).next());//next() System.out.println("下标1开始:"+list.listIterator(1). } System.out.println("子List 1-3:"+list.subList(1,3));next()); //子列表 ListIterator it = list.listIterator();//默认从下标0开//隐式光标属性add操作 ,插入到当前的下标的前面 it.add("sss"); while(it.hasNext()){ System.out.println("next Index="+it.nextIndex()+",} Object="+it.next()); //set属性 ListIterator it1 = list.listIterator(); it1.next(); it1.set("ooo"); ListIterator it2 = list.listIterator(list.size());//while(it2.hasPrevious()){ } System.out.println("previous Index="+it2.previousIndex()+",Object="+it2.previous()); 程序的执行结果为: 下标0开始:aaa 下标1开始:bbb 子List 1-3:[bbb, ccc] next Index=1,Object=aaa next Index=2,Object=bbb next Index=3,Object=ccc next Index=4,Object=ddd previous Index=4,Object=ddd previous Index=3,Object=ccc previous Index=2,Object=bbb previous Index=1,Object=aaa previous Index=0,Object=ooo 我们还需要稍微再解释一下 add() 操作。添加一个元素会导致新元素立刻被添加到隐式光标的前面。因此,添加元素后调用 previous () 会返回新元素,而调用 next() 则不起作用,返回添加操作之前的下一个元素。下标的显示方式,如下图所示: 对于List 的基本用法我们学会了,下面我们来进一步了解一下List的实现原理,以便价升我们对于集合的理解。 1.3.3 实现原理 前面已经提了一下Collection的实现基础都是基于数组的。下面我们就已ArrayList 为例,简单分析一下ArrayList 列表的实现方式。首先,先看下它的构造函数。 下列表格是在SUN提供的API中的描述:
其中第一个构造函数ArrayList()和第二构造函数ArrayList(Collection c) 是按照Collection 接口文档所述,所应该提供两个构造函数,一个无参数,一个接受另一个 Collection。 第3个构造函数: ArrayList(int initialCapacity) 是ArrayList实现的比较重要的构造函数,虽然,我们不常用它,但是某认的构造函数正是调用的该带参数:initialCapacity 的构造函数来实现的。 其中参数:initialCapacity 表示我们构造的这个ArrayList列表的初始化容量是多大。如果调用默认的构造函数,则表示默认调用该参数为initialCapacity =10 的方式,来进行构建一个ArrayList列表对象。 为了更好的理解这个initialCapacity 参数的概念,我们先看看ArrayList在Sun 提供的源码中的实现方式。先看一下它的属性有哪些: ArrayList 继承了AbstractList 我们主要看看ArrayList中的属性就可以了。 ArrayList中主要包含2个属性: 三亿文库3y.包含各类专业文献、应用写作文书、高等教育、各类资格考试、生活休闲娱乐、行业资料、外语学习资料、专业论文、文学作品欣赏、中学教育、72Java集合排序及java集合类详解(Collection、List、Map、Set)等内容。
【Top】 【点评】 您可在本站搜索以下内容: |
|
来自: 昵称21289270 > 《待分类1》