java.util.Collection接口

java.util.Collection接口

API

  1. 【√】boolean add(E e)

  2. 【√】boolean addAll(Collection<? extends E> c)

  3. 【√】void clear()

  4. 【√】boolean contains(Object o)

  5. 【√】boolean containsAll(Collection<?> c)

  6. 【√】boolean equals(Object o)

  7. 【√】int hashCode()

  8. 【√】boolean isEmpty()

  9. Iterator<E> iterator

  10. 【√】boolean remove(Object o)

  11. 【√】boolean removeAll(Collection<?> c)

  12. 【√】default boolean removeIf(Predicate<? super E> filter):删除集合中所有满足给定谓词的元素

  13. 【√】boolean retainAll(Collection<?> c):只保留给定子集合中的所有元素,其他元素都删除

  14. 【√】int size()

  15. 【√】default Spliterator<E> spliterator():创建一个可分迭代器spliterator,用于并行地处理集合。参考《Java 8 in Action》

  16. 【√】default Stream<E> stream:当spliterator()方法无法返回不可变、并发或延迟绑定的可分迭代器spliterator时,必须@Override此方法

  17. 【√】default Stream<E> parallelStream():当spliterator()方法无法返回不可变、并发或延迟绑定的可分迭代器spliterator时,必须@Override此方法

  18. 【√】Object[] toArray():集合转数组

    需要注意的是Object[] toArray()返回的不一定就是Object[]类型,它的类型需要根据运行时实际类型来判断。
    比如说我现在有Son类集成了Father类,运行如下代码:
    Son[] sons = new Son[]{new Son(), new Son() };
    Fater[] faters = sons;
    faters[0] = new Fater(); //该句会报错,因为fathers已经是Son[]类型的了,不能存入Fater对象

  19. 【√】<T> T[] toArray(T[] a)

  20. forEach:继承自Iterable接口的方法

源码

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
package java.util;

//Collection<E>接口主要用于:
//①传递集合;
//②在需要最大通用性的地方操作集合
public interface Collection<E> extends Iterable<E>{

//如果超过Integer.MAX_VALUE则返回Integer.MAX_VALUE
int size();

boolean isEmpty();

//@throws:如果查询元素的类型和集合类型不匹配,抛出ClassCastException
//@throws:如果查询元素是null,而集合不允许null,抛出NullPointerException
boolean contains(Object o);

//不保证遍历顺序,由具体实现类决定
Iterator<E> iterator();

//如果实现类通过iterator()指定了元素遍历顺序,那么toArray()返回的顺序必须与之一致
Object[] toArray();

//将集合中的元素转换为指定数组a
//@throws:如果指定的数组a为空,抛出NullPointerException
<T> T[] toArray(T[] a);
//使用方式:x是一个只含String的Collection
//String[] y = x.toArray(new String[0]);

//@throws:如果该集合不支持add操作,抛出UnsupportedOperationException
//@throws:如果集合不允许添加指定类型的元素,比如有的集合不允许重复添加,抛出ClassCastException
//@throws:如果集合不允许null元素,添加null元素时就抛出NullPointerException
//@throws:如果添加元素的某个属性不合理,抛出IllegalArgumentException
//@throws:如果根据插入限制,此时无法添加该元素,抛出IllegalStateException
boolean add(E e);

//@thorows:如果查找元素与集合元素类型不匹配,抛出ClassCastException
//@thorows:如果查找元素为null,集合不允许null元素,抛出NullPointerException
//@thorows:如果集合不支持remove操作,抛出UnsupportedOperationException
boolean remove(Object o);

//@throws:如果查找集合中有元素类型与被查找集合元素类型不匹配,超出ClassCastException
//@throws:如果查找集合中有null元,而被查找集合不支持null元素,超出NullPointerException
boolean containsAll(Collection<?> c);

//@throws:如果该集合不支持addAll操作,抛出UnsupportedOperationException
//@throws:如果子集合中含有不允许添加的元素类型,比如有的集合不允许重复添加,抛出ClassCastException
//@throws:如果集合不允许null元素,子集合中含有null元素时就抛出NullPointerException
//@throws:如果子集合中存在元素的某个属性不合理,抛出IllegalArgumentException
//@throws:如果根据插入限制,此时子集合中存在无法添加的元素,抛出IllegalStateException
boolean addAll(Collection<? extends E> c);

//@throws:如果子集合存在元素与集合元素类型不匹配,抛出ClassCastException
//@thorows:如果子集合存在元素为null,集合不允许null元素,抛出NullPointerException
//@throws:如果集合不支持removeAll操作,抛出UnsupportedOperationException
boolean removeAll(Collection<?> c);

//只保留子集合中的所有元素,删除其他元素
//@throws:如果集合不支持retainAll操作,抛出UnsupportedOperationException
//@throws:如果子集合中有元素类型与集合元素类型不匹配,抛出ClassCastException
//@throws:如果子集合中存在null元素,集合不允许null元素,抛出NullPointerException
boolean retainAll(Collection<?> c);

//@throws:如果集合不支持clear操作,抛出UnsupportedOperationException
void clear();

//如果@Override Object.equals()方法可以比较值
//默认直接比较内存,等效于“==”
boolean equals(Object o);

//@Override Object.equals()必须@Override Object.hashCode()
//保证hashCode相等的两个对象一定相同
int hashCode();

//========================================================
//1.8新加入:

//removeIf方法通过iterator()方法遍历集合,通过Iterator.remove()方法删除元素
//@throws:如果谓词为null,抛出NullPointerException
//@throws:如果元素无法被删除或集合不支持删除操作,抛出UnsupportedOperationException
//@Lambda:filter对于要删除的元素返回true
default boolean removeIf(Predicate<? super E> filter);

//通过此方法可以创建一个可分迭代器Spliterator,Collection的实现需要指明Spliterator.Characteristic属性,如果属性是Spliterator.SIZED并且集合为空,则不需要指明
//Collection的具体实现类应该要@Override此方法,返回更加特定的可分迭代器Spliterator
//为了支持stream()和parallelStream()的延迟加载特性,Spliterator.Characteristic应该是IMMUTABLE/CONCURRENT,或者Spliterator本身是延迟绑定的
//该方法创建的spliterator继承了iterator的fail-fast属性,即如果修改了集合内容,会立即抛出异常
default Spliterator<E> spliterator();

//当spliterator()方法无法返回不可变、并发或延迟绑定的可分迭代器spliterator时,必须@Override此方法
default Stream<E> stream();

//当spliterator()方法无法返回不可变、并发或延迟绑定的可分迭代器spliterator时,必须@Override此方法
default Stream<E> parallelStream();

}

异常

  1. UnsupportedOperationException:进行了集合不支持的操作。比如:往一个不可修改的集合中添加元素
  2. NullPointerException:试图通过contains查询null元素,而集合不允许null元素,抛出空指针异常
  3. ClassCastException:试图通过contains查询不匹配集合类型的元素,抛出类型不匹配异常
  4. IllegalArgumentException
  5. IllegalStateException

线程安全性

Collection<E>本身非线程安全,子类/子接口的线程安全性由其具体决定。

父类

Object

父接口

Iterable<E>

实现类(implements Collection)

  1. AbstractCollection
  2. AbstractList
  3. AbstractQueue
  4. AbstractSequentialList
  5. AbstractSet
  6. ArrayBlockingQueue
  7. ArrayDeque
  8. ArrayList
  9. AttributeList
  10. BeanContextServiceSupport
  11. ConcurrentHashMap.KeySetView
  12. ConcurrentLinkedDeque
  13. ConcurrentLinkedQueue
  14. ConcurrentSkipListSet
  15. CopyOnWriteArrayList
  16. CopyOnWriteArraySet
  17. DelayQueue
  18. EnumSet
  19. HashSet
  20. JobStateReasons
  21. LinkedBlockingQueue
  22. LinkedBlockingDeque
  23. LinkedHashSet
  24. LinkedList
  25. LinkedTransferQueue
  26. PriorityBlockingQueue
  27. PriorityQueue
  28. RoleList
  29. RoleUnresolvedList
  30. Stack
  31. SynchronousQueue
  32. TreeSet

重要子接口(extends Collection)

  1. BeanContext
  2. BeanContextServices
  3. BlockingQueue<E>
  4. Queue<E>
  5. List<E>
  6. NavigableSet<E>
  7. Deque<E>
  8. Set<E>
  9. SortedSet<E>
  10. TransferQueue<E>
-------------本文结束感谢您的阅读-------------

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

文章作者:DragonBaby308

发布时间:2019年07月10日 - 23:13

最后更新:2019年11月25日 - 21:33

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

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

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