java.util.List接口

java.util.List接口

API

  1. 【√】boolean add(E e):尾插法
  2. 【√】void add(int index, E element)
  3. 【√】boolean addAll(Collection<? extends E> c):尾插法,插入顺序由Collectioniterator()方法决定
  4. 【√】boolean addAll(int index, Collection<? extends E> c):在特定位置插入集合元素(集合不能为空),插入顺序由Collectioniterator()决定。如果在addAll过程中有线程对List进行了修改,那么结果不能保证
  5. 【√】void clear()
  6. 【√】boolean contains(Object o)
  7. 【√】boolean containsAll(Collection<? extends E> c)
  8. 【√】boolean equals(Object o):两个List元素个数、值和顺序都相等才返回true
  9. 【√】E get(int index)
  10. 【√】int hashCode():详细计算方式见源码;必须保证a.equals(b)时,a.hashCode() == b.hashCode()
  11. 【√】int indexOf(Object o):返回元素第一次出现时的下标;如果元素不存在,返回-1
  12. 【√】boolean isEmpty()
  13. 【√】Iterator<E> iterator()
  14. 【√】int lastIndexOf(Object o):返回元素最后一次出现时的下标;如果元素不存在,返回-1
  15. 【√】ListIterator<E> listIterator()
  16. 【√】ListIterator<E> listIterator(int index)ListIterator.next()返回的应该是List.get(index)
  17. 【√】E remove(int index)
  18. 【√】boolean remove(Object o):删除第一次出现的指定元素(如果存在的话)
  19. 【√】boolean removeAll(Collection<?> c)
  20. 【√】default void replaceAll(UnaryOperator<E> operator):对于List中的每一个元素,都根据operator执行替换
  21. 【√】boolean retainAll(Collection<?> c)
  22. 【√】E set(int index, E element)
  23. 【√】int size()
  24. 【√】default void sort(Comparator<? super E> c):根据给定的比较规则,对List进行排序
  25. 【√】default Spliterator<E> spliterator()Spliterator特征为Spliterator.SIZEDSpliterator.ORDERED,是通过iterator()方法获得,继承了fail-fast属性,即迭代式进行修改立马报错。
  26. 【√√】List<E> subList(int fromIndex, int toIndex):返回[fromIndex, toIndex)区间内的子列表;修改子列表,原列表也会跟着改变,反之亦然
  27. 【√】Object[] toArray()List.toArray()Array.asList()配合使用可以实现数组和列表的相互转化,该方法是线程安全的,即使List被持有,该方法也能返回一个新的数组
  28. 【√】<T> T[] toArray(T[] a):指定转换数组类型为T[] a对应的类型。如果List的长度大于a,那么其他剩余元素会被置为null
  29. 继承自java.util.Collection的方法:stream()parallelStream()removeIf()
  30. 继承自java.lang.Iterable的方法:forEach()

源码

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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
package java.util;

//List是有序集合,下标从0开始,允许重复元素
//List接口提供了基于下标index获取List元素的方法(如get、remove),但是这些方法的执行时间与index成比例递增,所以对于List元素index不确定的情况,iterator迭代要优于基于index查询
public interface List<E> extend Collection<E>{

//如果大小超过Integer.MAX_VALUE,返回Integer.MAX_VALUE
int size();

boolean isEmpty();

//@throws:List不允许null元素,查询null则抛出NullPointerException
//@throws:查询List不允许的元素类型,抛出ClassCastException
boolean contains(Object o);

Iterator<E> iterator();

//返回和List顺序一致的数组
//该方法是线程安全的,即使List被持有,该方法也能分配内存并返回一个新的数组
Object[] toArray();

//指定转换数组类型为T[] a对应的类型
//如果List的长度大于a,那么其他剩余元素会被置为null
//@throws:指定数组a的运行时元素类型不是List中元素的运行时元素类型的父类型,则抛出ArrayStoreException
//@throws:如果指定数组a为空,抛出NullPointerException
<T> T[] toArray(T[] a);
//具体使用:String[] y = x.toArray(new String[0]);

//尾插法
//@throws:如果List不允许null元素,插入null则抛出NullPointerException
//@throws:如果插入List不支持的元素类型,则抛出ClassCastException
//@throws:如果插入元素的某些属性阻止了插入,则抛出IllegalArgumentException
boolean add(E e);

//删除第一个出现的指定元素(如果存在)
//@throws:在不支持null的List中删除null,抛出NullPointerException
//@throws:删除List不支持的元素类型,抛出ClassCastException
//@throws:如果List不支持remove,抛出UnsupportedOperationException
boolean remove(Object o);

//throws:如果集合中含有null元素,而List不支持null,则抛出NullPointerException
//throws:如果集合中含有List不支持的元素,抛出ClassCastException
boolean containsAll(Collection<?> c);

//尾插法,插入顺序由Collection的iterator()方法决定
//@throws:List不支持null,添加null则抛出NullPointerException
//@throws:添加List不支持的数据类型,抛出ClassCastException
//@throws:List不支持addAll,抛出UnsupportedOperationException
//@throws:添加的元素中某些属性不合理,抛出IllegalArgumentException
boolean addAll(Collection<E> c);

//在List中特定位置插入集合元素,插入顺序由Collection的iterator()决定
//Collection不能为空
//如果在addAll过程中有线程对List进行了修改,那么结果不能保证
//@throws:List不支持null,添加null则抛出NullPointerException
//@throws:添加List不支持的数据类型,抛出ClassCastException
//@throws:List不支持addAll,抛出UnsupportedOperationException
//@throws:添加的元素中某些属性不合理,抛出IllegalArgumentException
//@throws:添加的元素的index超出了(0, size() )这个范围,抛出IndexOutOfBoundsException
boolean addAll(int index, Collection<? extends E> c);

//@throws:List不支持null,移除null则抛出NullPointerException
//@throws:移除List不支持的数据类型,抛出ClassCastException
//@throws:List不支持removeAll,抛出UnsupportedOperationException
boolean removeAll(Collection<?> c);

//@throws:List不支持null,操作null则抛出NullPointerException
//@throws:操作List不支持的数据类型,抛出ClassCastException
//@throws:List不支持retainAll,抛出UnsupportedOperationException
boolean retainAll(Collection<?> c);

//@throws:如果List不支持clear,抛出UnsupportedOperationException
void clear();

//两个List元素个数、值和顺序都相等才返回true
boolean equals(Object o);

/*List的hashCode计算方式:
* int hashCode = 1;
* for(E e : list) {
* hashCode = 31*hashCode + (e==null ? 0 : e.hashCode() );
* }
*/
//必须保证a.equals(b)时,a.hashCode() == b.hashCode()
int hashCode();

//@throws:如果index超过(0,size()),抛出IndexOutOfBoundsException
E get(int index);

//@throws:List不支持null,操作null则抛出NullPointerException
//@throws:操作List不支持的数据类型,抛出ClassCastException
//@throws:List不支持set,抛出UnsupportedOperationException
//@throws:element中存在属性不符合规范,抛出IllegalArgumentException
//@throws:如果index超过(0,size()),抛出IndexOutOfBoundsException
E set(int index, E element);

//@throws:List不支持null,操作null则抛出NullPointerException
//@throws:操作List不支持的数据类型,抛出ClassCastException
//@throws:List不支持add,抛出UnsupportedOperationException
//@throws:element中存在属性不符合规范,抛出IllegalArgumentException
//@throws:如果index超过(0,size()),抛出IndexOutOfBoundsException
void add(int index, E element);

//@throws:List不支持remove,抛出UnsupportedOperationException
//@throws:如果index超过(0,size()),抛出IndexOutOfBoundsException
E remove(int index);

//返回元素第一次出现时的下标
//如果元素不存在,返回-1
//@throws:如果查找了List不支持的null,抛出NullPointerException
//@throws:如果查找了List不支持的元素类型,抛出ClassCastException
int indexOf(Object o);

//返回元素最后一次出现时的下标
//如果元素不存在,返回-1
//@throws:如果查找了List不支持的null,抛出NullPointerException
//@throws:如果查找了List不支持的元素类型,抛出ClassCastException
int lastIndexOf(Object o);

ListIterator<E> listIterator();

//ListIterator.next()返回的应该是List.get(index)
//@throws:如果index超过(0,size()),抛出IndexOutOfBoundsException
ListIterator<E> listIterator(int index);

//返回[fromIndex,toIndex)区间内的子列表
//修改子列表,原列表也会跟着改变;反之亦然
List<E> subList(int fromIndex, int toIndex);
//如:list.sublist(from, to).clear()会清除列表中[from,to)部分的元素

//=============================================================
//1.8之后加入:

//对于List中的每一个元素,都根据operator执行替换
//@throws:如果指定List不支持replaceAll操作,抛出UnsupportedOperationException
//@throws:如果operator为null,抛出NullPointerException
default void replaceAll(UnaryOperator<E> operator);

//根据给定的比较规则,对List进行排序
//@throws:如果指定List不支持sort操作,抛出UnsupportedOperationException
//@throws:如果元素无法根据给定的Comparator进行比较,抛出ClassCastException
//@throws:如果发现Comparator违反了比较器契约,抛出IllegalArgumentException
default void sort(Comparator<? super E> c);

//Spliterator特征为Spliterator.SIZED和Spliterator.ORDERED
//Spliterator通过iterator()方法获得,继承了fail-fast属性,即迭代式进行修改立马报错
default Spliterator<E> spliterator();
}

异常

  1. NullPointerException:如果对一个不允许添加null元素的List插入null元素,则抛出NullPointerException
  2. ClassCastException:如果插入List不支持的元素类型,则抛出ClassCastException
  3. IllegalArgumentException:操作的元素存在不合理参数,抛出IllegalArgumentException
  4. UnsupportedOperationException:特定的List不支持该操作,抛出UnsupportedOperationException
  5. ArrayStoreException:如果调用<T> T[] toArray(T[] a)时,指定数组a的运行时元素类型不是List元素的运行时元素类型的父类型,则抛出ArrayStoreException
  6. IndexOutOfBoundsException:对index进行操作时,超出了(0, size() )这个范围,抛出IndexOutOfBoundsException

线程安全性

继承自Iterable接口的fail-fast迭代器。

父类

Object

父接口

  1. Collection<E>
  2. Iterable<E>

实现类(implements List)

重要子接口(extends List)

  1. AbstractList
  2. AbstractSequentialList
  3. ArrayList
  4. AttributeList
  5. CopyOnWriteArrayList
  6. LinkedList
  7. RoleList
  8. RoleUnresolvedList
  9. Stack
  10. Vector
-------------本文结束感谢您的阅读-------------

本文标题:java.util.List接口

文章作者:DragonBaby308

发布时间:2019年07月12日 - 22:03

最后更新:2019年09月22日 - 10:09

原始链接:http://www.dragonbaby308.com/java-util-List/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

急事可以使用右下角的DaoVoice,我绑定了微信会立即回复,否则还是推荐Valine留言喔( ఠൠఠ )ノ
0%