Java的集合框架,就是指Java的一组用来存放数据的容器类型的集合。
官方文档中的说法是,集合表示一组被称为其元素的对象。 一些集合允许重复元素,而其他集合不允许。 有些被命令和其他无序。
集合框架的设计理念,是要满足以下目标:
1)提高代码的效用
2)可以用同样的方式操作不同类型的集合
3)更轻易地对集合进行扩展和适应
整个集合框架就是围绕一组标准接口而设计。
集合框架主要分为两大类:Collection、Map
1.Collection:所有通用的Collection实现类,都应提供两个标准的构造器,一个无参构造函数和一个含参构造函数。每个Collection都从其Iterable继承了forEach方法,即可使用forEach方法遍历集合内元素
A.接口方法详情
-
int size()
:返回集合中的元素数,如果集合元素超过Integer.MAX_VALUE个,则返回Integer.MAX_VALUE -
boolean isEmpty()
:如果不包含元素,则返回true -
boolean contains(Object o)
:当且仅当集合至少包含一个指定元素时,返回true; -
Iterator<E> iterator()
:返回集合元素的迭代器 -
Objext[] toArray()
:返回一个包含此集合中的所有元素的数组。 -
<T> T[] toArray(T[] a)
:返回包含此集合中的所有元素的数组,且指定了泛型 -
boolea add(E e)
:向集合添加元素,成功更改时返回true,否则(如集合不允许重复,而新添元素已存在时),返回false -
boolean remove(Object o)
:从集合中删除指定元素,成功删除时返回true -
boolean containsAll(Collection<?> c)
:如果此集合包含指定集合中的所有元素,则返回true -
boolean addAll(Collection<? extends E> c)
:将指定集合中的所有元素添加到此集合 -
boolean removeAll(Collection<?> c)
:删除指定集合中包含的所有此集合元素 -
default boolean removeIf(Predicate<? super E> fliter)
:删除满足给定谓词的此集合的所有元素,默认实现使用iterator()遍历集合的所有元素。使用Iterator.remove()删除每个匹配的元素。 -
boolean retainAll(Collection<?> c)
:仅保留此集合中包含的元素。 -
void clear()
:从集合中删除所有元素 -
boolean equals(Object o)
:将指定的对象与此集合进行比较 -
int hashCode()
:返回此集合的哈希码值。此哈希码值表示的是返回对象的内存地址经过处理后的结构,不同对象的内存地址不一样,哈希码不一样。 -
default Spliterator<E> spliterator()
:创建一个Spliterator在这个集合中的元素。实施应该记录分配器报告的特征值。(?) -
default Stream<E> stream()
:返回一个顺序Stream与此集合作为其来源。(?) -
default Stream<E> paralletStream()
:返回可能并行的Stream与此集合作为其来源。(?)
B.Collection的子接口:
- List:有序集合,又称为序列。可以通过整数索引访问元素。已知实现类有:AbstractList、AbstractSequentialList、ArrayList、AttributeList、CopyOnWriteArrayList、LinkedList、RoleList、RoleUnresolvedList、Stack、Vector
- Set:不包含重复元素的集合。模拟了数学集接口。已知实现类:AbstractSet、ConcurrentHashMap.KeySetView、ConcurrentSkipListSet、CopyOnWriteArraySet、EnumSet、HashSet、JobStateReasons、LinkedHashSet、TreeSet
- Queue:设计用于在处理之前保留元素的集合。队列通常但不一定是以FIFO(先进先出)方式排序元素。 除了优先级队列之外,优先级队列是根据提供的比较器对元素进行排序,或者元素的自然排序,以及对元素LIFO(先进先出)进行排序的LIFO队列(或堆栈)。 无论使用什么顺序,队列的头都是通过调用remove()或poll()删除的元素。 在一个FIFO队列,所有新元素插入到队列的尾部 。 其他类型的队列可以使用不同的布局规则。 每个Queue实现必须指定其排序属性。AbstractQueue , ArrayBlockingQueue , ArrayDeque , ConcurrentLinkedDeque , ConcurrentLinkedQueue , DelayQueue , LinkedBlockingDeque , LinkedBlockingQueue , LinkedList , LinkedTransferQueue , PriorityBlockingQueue , PriorityQueue , SynchronousQueue
- BeanContext
- BeanContextServices
- BlockingDeque< E >
- BlockingQueue< E >
- Deque< E >
- NavigableSet< E >
- SortedSet< E >
- TransferQueue< E >