1. List接口
特点:有序、有下标、元素可重复
补充:继承了父接口提供的共性方法,同时定义了一些独有的与下标相关的操作方法
方法:<参考jdk1.8 API>
常用方法:
1 2 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测试例子
1 2 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]