1. List接口
特点:有序、有下标、元素可重复
补充:继承了父接口提供的共性方法,同时定义了一些独有的与下标相关的操作方法
方法:<参考jdk1.8 API>
常用方法:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 
 | boolean	add(E e)将指定的元素追加到此列表的末尾(可选操作)。
 void	add(int index, E element)
 将指定的元素插入此列表中的指定位置(可选操作)。
 void	clear()
 从此列表中删除所有元素(可选操作)。
 boolean	contains(Object o)
 如果此列表包含指定的元素,则返回 true 。
 boolean	equals(Object o)
 将指定的对象与此列表进行比较以获得相等性。
 E	get(int index)
 返回此列表中指定位置的元素。
 int	hashCode()
 返回此列表的哈希码值。
 int	indexOf(Object o)
 返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1。
 boolean	isEmpty()
 如果此列表不包含元素,则返回 true 。
 Iterator<E>	iterator()
 以正确的顺序返回该列表中的元素的迭代器。
 int	lastIndexOf(Object o)
 返回此列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1。
 E	remove(int index)
 删除该列表中指定位置的元素(可选操作)。
 boolean	remove(Object o)
 从列表中删除指定元素的第一个出现(如果存在)(可选操作)。
 E	set(int index, E element)
 用指定的元素(可选操作)替换此列表中指定位置的元素。
 int	size()
 返回此列表中的元素数。
 default void	sort(Comparator<? super E> c)
 使用随附的 Comparator排序此列表来比较元素。
 List<E>	subList(int fromIndex, int toIndex)
 返回此列表中指定的 fromIndex (含)和 toIndex之间的视图。
 <T> T[]	toArray(T[] a)
 以正确的顺序返回一个包含此列表中所有元素的数组(从第一个到最后一个元素); 返回的数组的运行时类型是指定数组的运行时类型。
 
 | 
List实现类:ArrayList、Vector、LinkedList
2. ArrayList类
数组
特点:
    1. 数组结构实现,查询快、增删慢;
    2. JDK1.2版本,运行效率快、线程不安全;
场景:注册(1次) -> 查询(n次)
注意:
- JDK7之前,无参构造方法实际创建长度为 10 的Object数组,用还是不用,数组就在那里,爱用不用(占了内存)
- JDK8之后,无参构造方法实际创建长度为 0 的Object数组,首次add元素时,才执行数组扩容操作,然后真正向数组中插入数据(Lazy懒),用的时候创建或加载,有效降低无用内存的占用。
 方法:<参考jdk1.8 API>
3. Vector类
数组、线程同步
特点:
    1. 数组结构实现,查询快、增删慢;
    2. JDK1.0版本,运行效率慢、线程安全。
4. LinkedList类
链表
特点:
- 链表结构实现,增删快,查询慢;
5. 源码:List实现类常用API测试例子
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 
 | import java.util.ArrayList;import java.util.Arrays;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Vector;
 
 public class TestArrayListMethods {
 public static void main(String[] args) {
 
 
 System.out.println("Test List:");
 testArrayList();
 
 System.out.println("\nTest LinkedList:");
 testLinkedList();
 
 System.out.println("\nTest Vector:");
 testVector();
 }
 
 public static void testVector() {
 List<String> list = new Vector<String>();
 listApiTest(list);
 }
 
 public static void testLinkedList() {
 List<String> list = new LinkedList<String>();
 listApiTest(list);
 }
 
 public static void testArrayList() {
 List<String> list = new ArrayList<String>();
 listApiTest(list);
 }
 
 public static void listApiTest(List<String> ll) {
 
 ll.add("A");
 ll.add("B");
 ll.add("C");
 ll.add(1, "abc");
 
 for (int i = 0; i < ll.size(); i++) {
 System.out.print(ll.get(i) + " ");
 }
 System.out.println();
 
 
 boolean bool = ll.remove("abc");
 System.out.println(bool + " " + ll.toString());
 Object rmObj = ll.remove(1);
 System.out.println(rmObj + " " + ll.toString());
 
 
 ll.set(0, "F");
 System.out.println(ll.toString());
 
 
 Object[] objs = ll.toArray();
 for (Object object : objs) {
 System.out.print(object + " ");
 }
 System.out.println();
 
 
 System.out.println(ll.contains("C"));
 
 
 ll.add(2, "C");
 System.out.println(ll.toString());
 System.out.println(ll.indexOf("C"));
 System.out.println(ll.lastIndexOf("C"));
 
 
 ll.clear();
 System.out.println(ll.toString());
 System.out.println(ll.size());
 System.out.println(ll.isEmpty());
 
 
 List<String> list = Arrays.asList("A", "B", "10", "D", "e");
 System.out.println(list.toString());
 }
 }
 
 
 | 
输出:
Test List:*************************************
A abc B C
true [A, B, C]
B [A, C]
[F, C]
F C
true
[F, C, C]
1
2
[]
0
true
[A, B, 10, D, e]
Test LinkedList:*************************************
A abc B C
true [A, B, C]
B [A, C]
[F, C]
F C
true
[F, C, C]
1
2
[]
0
true
[A, B, 10, D, e]
Test Vector:*************************************
A abc B C
true [A, B, C]
B [A, C]
[F, C]
F C
true
[F, C, C]
1
2
[]
0
true
[A, B, 10, D, e]