无意间都到一篇《走心的安卓工程师跳槽经验分享》,发现自己工作几年了,技术方面虽然有了飞跃的进步,可是不知道自己的技术到了什么地步,每个方面我都涉及到了,但都不深,这大概是初级工程师的诟病吧!
即使知道也不知道从何下手,非常感谢《走心的安卓工程师跳槽经验分享》的作者!
感兴趣的朋友和我一起走下去吧!
03集合专栏(01_Collection)
1、集合类存放于java.util包中。
2、集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中对象的引用(reference)。
3、集合类型主要有3种:set(集)、list(列表)和map(映射)。
4、List和Set继承了Collection,而Map则独成一体。
Interface Collection《E》 (英文模式不显示)
类型参数:
E - the type of elements in this collection.(此集合中的元素类型)
父类:
Iterable
所有已知子接口
BeanContext, BeanContextServices, BlockingDeque, BlockingQueue, Deque, List, NavigableSet, Queue, Set, SortedSet, TransferQueue
所有已知子类:
AbstractCollection, AbstractList, AbstractQueue, AbstractSequentialList, AbstractSet, ArrayBlockingQueue, ArrayDeque, ArrayList, AttributeList, BeanContextServicesSupport, BeanContextSupport, ConcurrentHashMap.KeySetView, ConcurrentLinkedDeque, ConcurrentLinkedQueue, ConcurrentSkipListSet, CopyOnWriteArrayList, CopyOnWriteArraySet, DelayQueue, EnumSet, HashSet, JobStateReasons, LinkedBlockingDeque, LinkedBlockingQueue, LinkedHashSet, LinkedList, LinkedTransferQueue, PriorityBlockingQueue, PriorityQueue, RoleList, RoleUnresolvedList, Stack, SynchronousQueue, TreeSet, Vector
public interface Collection{
}
集合层次结构中的根接口。集合表示一组对象,称为其元素。有些集合允许重复元素而其他集合则不允许。有些是有序的,有些是无序的。 JDK不提供此接口的任何直接实现:它提供了更具体的子接口(如Set和List)的实现。此接口通常用于传递集合并在需要最大通用性的情况下对其进行操作。
包或多个集合(可能包含重复元素的无序集合)应直接实现此接口。
所有通用Collection实现类(通常通过其子接口之间间接实现Collection)应提供两个“标准”构造函数:void(无参数)构造函数,它创建一个空集合,以及一个构造函数,其中包含一个类型的参数Collection,使用与其参数相同的元素创建新集合。实际上,后一个构造函数允许用户复制任何集合,从而生成所需实现类型的等效集合。没有办法强制执行此约定(因为接口不能包含构造函数),但Java平台库中的所有通用Collection实现都符合。
如果此集合不支持该操作,则指定此接口中包含的“destructive”方法(即修改其操作集合的方法)将抛出UnsupportedOperationException。如果是这种情况,如果调用对集合没有影响,则这些方法可能(但不是必须)抛出UnsupportedOperationException。例如,如果要添加的集合为空,则可以(但不是必须)在不可修改的集合上调用addAll(Collection)方法抛出异常。
某些集合实现对它们可能包含的元素有限制。例如,某些实现禁止null元素,并且一些实现对其元素的类型有限制。尝试添加不合格的元素会引发未经检查的异常,通常是NullPointerException或ClassCastException。试图查询不合格元素的存在可能会引发异常,或者它可能只是返回false;一些实现将展示前一种行为,一些将展示后者。更一般地,尝试对不合格的元素进行操作,其完成不会导致将不合格的元素插入到集合中,这可能会引发异常,或者可能会在实现的选择中成功。此类异常在此接口的规范中标记为“可选”。
由每个集合决定自己的同步策略。在实现没有更强的保证的情况下,未定义的行为可能是由于另一个线程正在变异的集合上的任何方法的调用而导致的;这包括直接调用,将集合传递给可能执行调用的方法,以及使用现有迭代器来检查集合。
Collections Framework接口中的许多方法都是根据equals方法定义的。例如,contains(Object o)方法的规范说:“当且仅当此集合包含至少一个元素e时才返回true(o == null?e == null:o.equals(e)) “。不应将此规范解释为暗示使用非null参数o调用Collection.contains将导致对任何元素e调用o.equals(e)。实现可以自由地实现优化,从而避免等于调用,例如,通过首先比较两个元素的哈希码。 (Object.hashCode()规范保证具有不等哈希代码的两个对象不能相等。)更一般地,各种集合框架接口的实现可以自由地利用底层Object方法的指定行为,无论实现者认为它是否合适。
执行集合的递归遍历的某些集合操作可能会失败,并且集合直接或间接包含自身的自引用实例也会失败。这包括clone(),equals(),hashCode()和toString()方法。实现可以可选地处理自引用场景,但是大多数当前实现不这样做。
此接口是Java Collections Framework的成员。
实施要求:
默认方法实现(继承或其他方式)不应用任何同步协议。如果Collection实现具有特定的同步协议,则它必须覆盖默认实现以应用该协议。
方法:
boolean add(E e)
确保此集合包含指定的元素(可选操作)。
boolean addAll(Collection <?extends E> c)
将指定集合中的所有元素添加到此集合中(可选操作)。
void clear()
从此集合中删除所有元素(可选操作)。
boolean contains(Object o)
如果此collection包含指定的元素,则返回true。
boolean containsAll(Collection <?> c)
如果此collection包含指定collection中的所有元素,则返回true。
boolean equals(Object o)
将指定对象与此集合进行比较以获得相等性。
int hashCode()
返回此集合的哈希码值。
boolean isEmpty()
如果此collection不包含任何元素,则返回true。
Iterator iterator()
返回此集合中元素的迭代器。
default Stream parallelStream()
以此集合作为源返回可能并行的Stream。
boolean remove(Object o)
从此集合中移除指定元素的单个实例(如果存在)(可选操作)。
boolean removeAll(Collection <?> c)
删除此集合的所有元素,这些元素也包含在指定的集合中(可选操作)。
default boolean removeIf(Predicate <?super E> filter)
删除此集合中满足给定谓词的所有元素。
boolean retainAll(Collection <?> c)
仅保留此集合中包含在指定集合中的元素(可选操作)。
int size()
返回此集合中的元素数。
default Spliterator spliterator()
在此集合中的元素上创建Spliterator。
default Stream stream()
返回以此集合为源的顺序Stream。
Object[] toArray()
返回包含此集合中所有元素的数组。
T [] toArray(T [] a)
返回一个包含此collection中所有元素的数组;返回数组的运行时类型是指定数组的运行时类型。
下一节讲述 ArrayList,包含在ArrayList循环中删除某元素,而不报UnsupportedOperationException。