您的位置:首页 > 编程语言 > Java开发

java集合框架——List

2016-03-20 15:22 507 查看

一、List接口概述

List有个很大的特点就是可以操作角标。

下面开始介绍List接口中相对于Collection接口比较特别的方法。在Collection接口中已经介绍的方法此处就不再赘述。

1.添加

void
add(int index,E element)

在列表的指定位置插入指定元素(可选操作)。
boolean
addAll(int index, Collection<? extendsE> c)

将指定 collection 中的所有元素都插入到列表中的指定位置(可选操作)。
这两个方法相对于Collection接口,可以直接在特定的地方插入新的元素或者集合。

2.删除。

E
remove(int index)

移除列表中指定位置的元素(可选操作)。
这个方法相对于Collection接口来说,可以直接删除特定位置上的元素。

3.修改

E
set(int index,E element)

用指定元素替换列表中指定位置的元素(可选操作)。
这个方法可以将指定位置上的元素替换为另外一个元素(对象)。

4.查找

E
get(int index)

返回列表中指定位置的元素。
int
indexOf(Object o)

返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,则返回 -1。
int
lastIndexOf(Object o)

返回此列表中最后出现的指定元素的索引;如果列表不包含此元素,则返回 -1。
List<E>
subList(int fromIndex,int toIndex)

返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之间的部分视图。
可以看出,上述List所有特有的方法都是和角标操作有关的,这是和List“有序”特点造成的。

5.List接口的特有方法:listIterator

ListIterator<E>
listIterator()

返回此列表元素的列表迭代器(按适当顺序)。
ListIterator<E>
listIterator(int index)

返回列表中元素的列表迭代器(按适当顺序),从列表的指定位置开始。
案例:

package p02.VectorDemo;

import java.util.Enumeration;
import java.util.Iterator;
import java.util.Vector;

public class VectorDemo
{
public staticvoid main(String[] args) {
Vector v=new Vector();
v.add("abc1");
v.add("abc2");
v.add("abc3");
v.add("abc4");

Demo1(v);
Demo2(v);
}

private staticvoid Demo2(Vector v) {

for(Iterator it=v.iterator();it.hasNext();)
{
System.out.println(it.next());
}

}

private staticvoid Demo1(Vector v)
{
for (Enumeration e = v.elements(); e.hasMoreElements();)
{
System.out.println(e.nextElement());
}
}

}


View Code
使用for循环遍历容器是最靠谱的,这是应当注意的地方。

三、LinkedList类

1.概述。

LinkedList底层是链表数据结构,这就导致了它的内容在内存中并不是连续的。这也使得它增删速度快而查询速度慢。注意,LinkedList中存储的都是对象的地址,即引用,而非对象本身

2.LinkedList特有的方法。

2.1.添加。

void
addFirst(E e)

将指定元素插入此列表的开头。
void
addLast(E e)

将指定元素添加到此列表的结尾。
2.2.删除

E
removeFirst()

移除并返回此列表的第一个元素。
E
removeLast()

移除并返回此列表的最后一个元素。
E
pollFirst()

获取并移除此列表的第一个元素;如果此列表为空,则返回 null。
E
pollLast()

获取并移除此列表的最后一个元素;如果此列表为空,则返回 null。
后者在JDK1.6之后取代了前者,原因是前者在列表为空的时候抛出了NoSuchElementException异常,而后者则返回Null,这为健壮性的判断创造了更好的条件。

2.3.获取。

E
getFirst()

返回此列表的第一个元素。
E
getLast()

返回此列表的最后一个元素。
E
peekFirst()

获取但不移除此列表的第一个元素;如果此列表为空,则返回 null。
E
peekLast()

获取但不移除此列表的最后一个元素;如果此列表为空,则返回 null。
peekFirst和peekLast方法在JDK1.6之后取代了getFirst方法和getLast方法,原因同上。

四、ArrayList类

1.概述。

ArrayList和Vector类几乎相同,略。

但需要注意的是,ArrayList中存储的是对象的引用,即地址,而非对象本身。如果ArrayList容器发生了al.add(3);这种情况,但是编译器并没有报错,不能认为是集合中可以存储基本数据类型,事实上在这个过程中发生了两件事:自动装箱以及上转型。这和Object obj=3;有着异曲同工之妙。

2.方法。

略。

注意,虽然ArrayList略掉很多,但并不是说它不重要,只是因为方法中和List接口中的差不多,所以就不做介绍了。实际上在开发中最常使用的类就是ArrayList。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: