public interface List<E> extends Collection<E>

如果要使用List接口进行操作,就必须依靠子类实现对象的实例化操作,而在实际开发中 List 子接口有 ArrayList, Vector 和 LinkedList3 个常用子类。
ArrayList是List子类,可以直接通过对象的多态性为List接口实例化,此类的定义如下:
public class ArrayList extends AbstractList implements List , RandomAccess, Cloneable, Serializable
从定义中可以发现ArrayList类继承了 AbstractList类,AbstractList类的定义如下:
public abstract class AbstractList extends AbstractCollection implements List

Collection,List 需要arraylist子类实例化,
add(e):Collection
add(index,e):List
- package jiaqi;
-
- import java.util.ArrayList;
- import java.util.Collection;
- import java.util.List;
-
- public class demo458_1 {
-
- public static void main(String[] args)
- {
- // 因为arraylist是List接口子类,List接口继承Collection
- Collection<String> allcollection= new ArrayList<String>();
- // 因为arraylist是List接口子类
- List<String> alllist = new ArrayList<String>();
-
- alllist.add("list_string_1");//Collection
- alllist.add("list_string_2");
- alllist.add(0,"list_string_3");//List
- System.out.println(alllist);
-
- allcollection.add("collection_string_1");//collection中
- allcollection.add("collection_string_2");
- System.out.println(allcollection);
-
- alllist.addAll(allcollection);//collection
- alllist.addAll(0,allcollection);//list
-
- System.out.println(alllist);
-
-
- }
-
- }
-
从上面程序的运行结果可以发现,使用List中的add(int index,E element)方法可以在集合中的指定位置增加元素,而其他的两个add()方法只是在集合的最后进行内容的追加。

- package jiaqi;
-
- import java.util.ArrayList;
- import java.util.List;
-
- public class demo459_1 {
-
- public static void main(String[] args)
- {
- List<String> alllist = new ArrayList<String>();
- alllist.add("string_1");
- alllist.add(0,"string_2");
- alllist.add("string_3");
- alllist.add("string_4");
- System.out.println(alllist);
-
- alllist.remove("string_4");//collection
- alllist.remove(0);//list
- System.out.println(alllist);
-
- }
-
- }
-

在Collection接口中定义了取得全部数据长度的方法size(),而在List接口中存在了取得集合中指定位置元素的操作get(int index),使用这两个方法就可以将集合中的全部内容进行输出。
for,size,get(i)
- package jiaqi;
-
- import java.util.ArrayList;
- import java.util.List;
-
- public class demo460_1
- {
- public static void main(String[] args)
- {
- List<String> allList = new ArrayList<String>();
- allList.add("s1");
- allList.add("s2");
- allList.add("s3");
- allList.add("s4");
- System.out.println("正序输出:");
- for(int i=0;i<allList.size();i++)
- {
- System.out.print(allList.get(i)+"\t");
- }
- System.out.println();
-
- System.out.println("逆序输出:");
- for(int i=allList.size()-1;i>=0;i--)
- {
- System.out.print(allList.get(i)+"\t");
- }
- System.out.println();
-
-
- }
- }
-

注意:
String str[] = allList.toArray(new String[] {});
- package jiaqi;
-
- import java.util.ArrayList;
- import java.util.List;
-
- public class demo461_1 {
-
- public static void main(String[] args)
- {
- // TODO 自动生成的方法存根
- List<String> allList = new ArrayList<String>();
- allList.add("s1");
- allList.add("s2");
- allList.add("s3");
- //方法1:
- Object obj[] = allList.toArray();
- for(int i=0;i<allList.size();i++)
- {
- String s = (String) obj[i];
- System.out.print(s+"\t");
- }
- System.out.println();
-
- //方法2:
- String str[] = allList.toArray(new String[] {});
- // String str1[] = new String[10];
- for(int i=0;i<allList.size();i++)
- {
- System.out.print(str[i]+"\t");
- }
-
- }
-
- }
-
在List中还存在截取集合、查找元素位置、判断元素是否存在、集合是否为空等操作。
isEmpty,contains,subList,indexOf
- package jiaqi;
-
- import java.util.ArrayList;
- import java.util.List;
-
- public class demo461_2 {
-
- public static void main(String[] args) {
- // TODO 自动生成的方法存根
- List<String> allList = new ArrayList<String>();
-
- allList.add("s1");
- allList.add("s2");
- allList.add("s3");
- allList.add("s4");
- System.out.println(allList);
- System.out.println("是否空:"+allList.isEmpty());
- System.out.println("是否存在s1:"+allList.contains("s1"));
- System.out.println("截取0-3:"+allList.subList(0, 3));
- System.out.println("s2的位置:"+allList.indexOf("s2"));
- System.out.println("是否空:"+allList.isEmpty());
- }
-
- }
-

- package jiaqi;
-
- import java.util.List;
- import java.util.Vector;
-
- public class demo462_1 {
-
- public static void main(String[] args) {
- // TODO 自动生成的方法存根
- List<String> alList = new Vector<String>();
- alList.add("s1");
- alList.add(0,"s2");
- alList.add("s3");
- System.out.println(alList);
-
- for(int i=0;i<alList.size();i++)
- {
- System.out.print(alList.get(i)+"\t");
- }
- }
-
- }
-

- package jiaqi;
-
- import java.util.List;
- import java.util.Vector;
-
- public class demo462_1 {
-
- public static void main(String[] args) {
- // TODO 自动生成的方法存根
- Vector<String> alList = new Vector<String>();
- alList.addElement("s1");
- alList.addElement("s2");
- alList.addElement("s3");
- System.out.println(alList);
-
- for(int i=0;i<alList.size();i++)
- {
- System.out.print(alList.get(i)+"\t");
- }
- }
-
- }
-

public class LinkedList extends AbstractSequentialList implements List , Queue , Cloneable, Serializable



- package jiaqi;
-
- import java.util.LinkedList;
-
- public class demo465_1 {
-
- public static void main(String[] args) {
- // TODO 自动生成的方法存根
- LinkedList<String> link = new LinkedList<String>();
- link.add("A");
- link.add("B");
- link.add("C");
- System.out.println(link);
-
- link.addFirst("D");
- link.addLast("E");
- System.out.println(link);
- }
-
- }
-

- package jiaqi;
-
- import java.util.LinkedList;
-
- public class demo465_2 {
-
- public static void main(String[] args) {
- // TODO 自动生成的方法存根
- LinkedList<String> link = new LinkedList<String>();
-
- link.add("A");
- link.add("B");
- link.add("C");
- link.add("D");
- System.out.println("element查找标头:"+link.element());
- System.out.println(link);
- System.out.println("peek查找标头:"+link.peek());
- System.out.println(link);
- System.out.println("poll查找标头:"+link.poll());
- System.out.println(link);
-
- }
-
- }
-
有问题:for(int i=0;i 有可能是因为:link.pool之后,link.size也在变化