List接口继承了Collection接口以定义一个允许重复项的有序集合。该接口不但能够对列表的一部分进行处理,还添加了面向位置的操作。
面向位置的操作包括插入某个元素或Collection的功能,还包括获取、除去或更改元素的功能。在List中搜索元素可以从列表的头部或尾部开始,如果找到元素,还将报告元素所在的位置。
void add(int index, Object element) //加到指定位置
boolean addAll(int index, Collection collection)
Object get(int index) //获取指定位置的元素
int indexOf(Object element)
int lastIndexOf(Object element)
Object remove(int index)
Object set(int index, Object element) //替换指定位置的元素
List subList(int fromIndex, int toIndex)
注意:
1)使用List(如ArrayList)时,不会自动调用hashCode()方法。因为在List中,重复了就重复了,不需判断,保证唯一性。
2)List中添加了下标index的功能,这样对List的修改可以利用set方法对指定位置的元素直接进行替换,不需要象Set那么复杂(要转换成数组才能修改,之后还要转换回去)。
3)Collection用Iterator迭代器,而List可以用ListIterator列表迭代器。前者只能next(),后者不但包含next()方法,还包含previous()方法。因此,如果要用List做类似书的翻页功能,不但可以向后翻,还可以向前翻。
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import org.junit.Test;
/*
* List在Collection基础上添加了一些“面向位置”的功能--index
* add(index)
* remove(index)
* indexOf(obj)
* lastIndexOf(obj)
* listIterator
* get(index)
*
*/
/*
* Java中类的系列中名称的命名规范(名称中包含两部分):
* 第一部分表示性能(具体实现如算法、存储) : Array, Hash, Tree, Linked
* 第二部分表示功能--能做什么如 add(),remove,iterator,是否允许重复,是否有序
*
* ArrayList,LinkedList,HashSet,TreeSet,HashMap,TreeMap
* 以后根据工程需求去选择合适的系列和合适的实现
*
* 集合一般的功能:
* add(),remove(),isEmpty(), size()
* contains(), iterator(), toArray(), retainAll()
*
*/
public class ListDemo {
@Test//面向位置的操作演示
public void demo1() {
List list = new ArrayList();
list.add(100);
list.add(0,200);
list.add(1,"aa");
list.add(2,"bb");
list.add(4,3.14);
list.remove(new Integer(100));
list.remove(1);
//面向位置的遍历
for(int i=0; i<list.size();i++){
Object obj = list.get(i);
System.out.println(obj);
}
}
/*List有一个自己特有的迭代器 ListIterator,
它不但可以next(),还可以previous()
*/
/*
* LinkedList相比普通List有一些有关链表的专用操作如:
* addFirst(),addLast(),removeFirst(),removeLast()
*/
@Test
public void demo2() {
LinkedList list = new LinkedList();
list.add(100);
list.add("abc");
list.addFirst(200);
list.addLast(3.14);
for(Object obj:list){
System.out.println(obj);
}
}
}