interface Collection<E> // 集,一组数据
|--> interface Set<E> // 集合,不允许重复元素
| |--> interface SortedSet<E> // 对元素进行排序
| | |--> interface NavigableSet<E> // 可获得离指定元素最近的元素
| | | |--> class TreeSet<E> // 使用TreeMap<E, Object>实现,非线程安全
| | | |--> class ConcurrentSkipListSet<E> // 使用ConcurrentSkipListMap实现,线程安全
| |
| |--> class HashSet<E> // 使用HashMap<E, Object>实现,非线程安全
| | |--> class LinkedHashSet<E> // 维护元素的添加顺序,使用LinkedHashMap<E, Object>实现,非线程安全
| |
| |--> class CopyOnWriteArraySet<E> // 使用CopyOnWriteArrayList实现,线程安全
| |--> class ArraySet<E> // Android类,内存优化(相比于HashSet),不保证线程安全
|
|
|--> interface List<E> // 序列,可以控制元素的插入位置,通过序号访问元素,以及查找元素
| |--> class ArrayList<E> // 使用可变数组(resizable-array)实现,非线程安全
| |--> class LinkedList<E> // 使用双向链表(doubly-linked list)实现,非线程安全
| |--> class CopyOnWriteArrayList<E> // 类似ArrayList,线程安全
| |--> class Vector<E> // 类似ArrayList,线程安全
| | |--> class Stack<E> // LIFO
|
|
|--> interface Queue<E> // 队列,FIFO(典型而非必须),不支持对元素进行索引访问
| |--> interface BlockingQueue<E> // 阻塞队列,线程安全
| | |--> class ArrayBlockingQueue<E> // 基于数组的定长阻塞队列
| | |--> class LinkedBlockingQueue<E> // 基于链表的定长或不定长阻塞队列
| | |--> class PriorityBlockingQueue<E> // 基于堆(heap)的不定长阻塞队列
| | |--> class SynchronousQueue<E> // 不存储元素的阻塞队列
| | |--> class DelayQueue<E extends Delayed> // 无界的延迟元素阻塞队列
| | |
| | |--> interface BlockingDeque<E> // 双端阻塞队列
| | | |--> class LinkedBlockingDeque<E> // 基于链表的定长或不定长双端阻塞队列
| | |
| | |--> interface TransferQueue<E> // 生产者等待消费者接收元素
| | | |--> class LinkedTransferQueue<E> // 基于链表的无界传输队列
| |
| |--> class PriorityQueue<E> // 优先队列,元素保持优先级排列,基于堆(heap)实现,非线程安全
| |--> class ConcurrentLinkedQueue<E> // 基于链表的无界队列,线程安全
| |
| |--> interface Deque<E> // 双端队列(double ended queue),可用作队列或栈
| | |--> class ArrayDeque<E> // 基于数组的双端队列,非线程安全
| | |--> class LinkedList<E> // 基于链表的双端队列,非线程安全
| | |--> class ConcurrentLinkedDeque<E> // 基于链表的无界双端队列,线程安全
| | |--> interface BlockingDeque<E>
interface Map<K, V> // 映射,不允许重复键值,一个键值对应最多一个数据
|--> interface SortedMap<K, V> // 键全排序
| |--> interface NavigableMap<K,V> // 导航方法返回离给定查找目标最近的匹配
| | |--> class TreeMap<K, V> // 使用红黑树实现,非线程安全
| | |--> interface ConcurrentNavigableMap<K,V>
|
|--> class HashMap<K, V> // 基于散列表(hash table,数组+链表)实现,非线程安全
| |--> class LinkedHashMap<K, V> // 使用散列表和链表实现,维持一个双向链表来记录键值对的插入顺序,非线程安全
|
|--> interface ConcurrentMap<K,V> // 原子性保证,线程安全
| |--> class ConcurrentHashMap<K,V> // 类似HashTable
| |--> interface ConcurrentNavigableMap<K,V> // 子映射可导航
| | |--> class ConcurrentSkipListMap<K,V> // 基于跳跃列表实现
|
|--> class EnumMap<K extends Enum<K>, V> // 使用双数组实现,其中键是枚举型,非线程安全
|--> class IdentityHashMap<K,V> // 使用散列表(数组)实现,比较键以及值时使用引用比较代替值比较,非线程安全
|--> class WeakHashMap<K,V> // 使用散列表实现,其中键是弱引用,非线程安全
|
|--> class Hashtable<K, V> // 类似HashMap,线程安全
|--> class ArrayMap<K, V> // Android类,内存优化(相比于HashMap)
class Collections // 作用于或返回集的工具类
class Arrays // 作用于或返回数组的工具类
class LruCache<K, V> // Android类,使用LinkedHashMap<K, V>实现,线程安全
class SparseArray<E> // Android类,使用双数组实现,将整型映射至对象
简介:
Collection
boolean add(E e)
:确保该集包含指定元素,当该集发生变化时返回true
boolean remove(Object o)
:从该集移除指定元素的一个实例,当该集包含指定元素时返回true
boolean addAll(Collection<? extends E> c)
:添加指定集的所有元素至该集,当该集发生变化时返回true
boolean removeAll(Collection<?> c)
:从该集移除全部存在于指定集的元素,当该集发生变化时返回true
boolean retainAll(Collection<?> c)
:在该集中仅保留存在于指定集的元素,当该集发生变化时返回true
Set
boolean equals(Object o)
:当指定物件同样是个集合,两个集合大小一致,且该集合包含指定集合的每一个成员时返回true
。该定义确保此方法适用于集合的不同实现。Overrides: equals in interface Collection
SortedSet
获取子集指的是得到子集的视图,对子集的修改会反映到该集,反之亦然。
SortedSet<E> subSet(E fromElement, E toElement)
:获取子集[fromElement
,toElement
)
SortedSet<E> headSet(E toElement)
:获取严格小于toElement
的子集
SortedSet<E> tailSet(E fromElement)
:获取大于等于fromElement
的子集
E first()
:获取当前最小的元素
E last()
:获取当前最大的元素NavigableSet
E lower(E e)
:获取小于e
的最大元素,没有则为空
E floor(E e)
:获取小于等于e
的最大元素,没有则为空
E ceiling(E e)
:获取大于等于e
的最小元素,没有则为空
E higher(E e)
:获取大于e
的最小元素,没有则为空
E pollFirst()
:获得最小元素并移除
E pollLast()
:获得最大元素并移除List
boolean equals(Object o)
:当且仅当指定物件同样是个序列,两个序列大小一致,且两个序列的所有对应元素也相等时返回true
。换句话说,当两个序列有相同顺序的相同元素时定义为相等。该定义确保此方法适用于序列的不同实现。Overrides: equals in interface Collection
E set(int index, E element)
:替代指定位置元素并返回旧元素
E remove(int index)
:移除指定位置元素并返回旧元素
List<E> subList(int fromIndex, int toIndex)
:获取子序列[fromIndex
,toIndex
),这里得到的是子序列的视图,对子序列的非结构性修改会反映到该序列,反之亦然。ArrayList
【集合详解】ArrayList源码解读之动态扩容-CSDN博客Vector
boolean removeElement(Object obj)
:从该向量中移除参数的首次出现,功能上等同于remove(Object)
Stack
E peek()
:获取栈顶元素
int search(Object o)
:返回离栈顶最近的相同元素至栈顶的距离,栈顶元素距离为1Queue
boolean add(E e)
:如果可以立即往该队列里插入指定元素且不违反容量限制则返回true
,若当前没有可用空间则抛出异常。Overrides: add in interface Collection
boolean offer(E e)
:同add
,如果元素能加入队列则返回true
,否则返回false
。
E remove()
:检索并移除队列头部,当队列为空时抛出异常。
E poll()
:同remove
,当队列为空时返回null
。
E element()
:检索队列头部但并不移除,当队列为空时抛出异常。
E peek()
:同element
,当队列为空时返回null
。BlockingQueue
void put(E e)
:往该队列插入指定元素,必要时等待空间变得可用。
boolean offer(E e, long timeout, TimeUnit unit)
:同put
,最多等待指定时间。
E take()
:检索并移除队列头部,必要时等待直到有元素变得可用。
E poll(long timeout, TimeUnit unit)
:同take
,最多等待指定时间。
int remainingCapacity()
:返回该队列在无需阻塞下能理想接收的额外的元素数目。
int drainTo(Collection<? super E> c)
:从该队列移除所有可用元素并添加至给定集,返回传输元素的数目。
BlockingQueue(阻塞队列)详解 - CSDN博客
java并发学习之BlockingQueue实现生产者消费者 - CSDN博客
Throws exception | Special value | Blocks | Times out | |
---|---|---|---|---|
Insert | add(e) | offer(e) | put(e) | offer(e, time, unit) |
Remove | remove() | poll() | take() | poll(time, unit) |
Examine | element() | peek() | 不适用 | 不适用 |
-
PriorityQueue
深入理解Java PriorityQueue - CarpenterLee - 博客园 -
Deque
void push(E e)
:往双端队列表现的栈推入元素,等价于addFirst
。
E pop()
:从双端队列表现的栈推出元素,等价于removeFirst
。 -
Map
V put(K key, V value)
:将指定值联系至指定键,返回键联系的先前的值或null
。
V remove(Object key)
:移除键对应的键值对,返回键联系的先前的值或null
。
Set<K> keySet()
:返回所有键的集合视图。
Collection<V> values()
:返回所有值的集视图。
Set<Map.Entry<K, V>> entrySet()
:返回所有键值对的集合视图。
boolean equals(Object o)
:当给定物件也是一个映射且两个映射包含相同键值对时返回true
,该定义确保此方法适用于映射的不同实现。 -
SortedMap
以下方法的功能与SortedSet
相应的方法类似:
SortedMap<K,V> subMap(K fromKey, K toKey);
SortedMap<K,V> headMap(K toKey);
SortedMap<K,V> tailMap(K fromKey);
K firstKey();
K lastKey();
NavigableMap
Map.Entry<K,V> lowerEntry(K key)
:返回严格小于给定键的最大键对应的键值对,当没有这样的键时返回null
。
K lowerKey(K key)
:返回严格小于给定键的最大键,当没有这样的键时返回null
。
NavigableSet<K> navigableKeySet()
:返回所有键的可导航集合视图。TreeMap
Java提高篇(二七)-----TreeMap - chenssy的博客 - CSDN博客HashMap
Java8系列之重新认识HashMap - ImportNew
(编者注:原文扩容机制中,key = 3、7、5,put顺序依次为 5、7、3有误,顺序应为3、7、5。)ConcurrentHashMap
ConcurrentHashMap演进从Java7到Java8 | 技术世界EnumMap
java集合(四)Map集合之EnumMap详解 - 跃小云 - 博客园HashTable
boolean contains(Object value)
:等价于boolean containsValue(Object value)
LruCache
彻底解析Android缓存机制——LruCache - 简书SparseArray
SparseArray 的使用及实现原理 - 掘金
类似的还有:
map | key | value |
---|---|---|
SparseArray | int | Object |
SparseBooleanArray | int | boolean |
SparseIntArray | int | int |
SparseLongArray | int | long |
LongSparseArray | long | Object |
比较:
ArrayList
&ArrayBlockingQueue
&ArrayDeque
三者都是基于数组来实现,ArrayList
在数组中间index
位置插入和删除元素时,index
后的元素都要通过System.arraycopy
来搬动,而ArrayBlockingQueue
通过takeIndex
和putIndex
两个标志位来标记定长数组的实际队首和队尾,而且当标志位到达数组末尾时会返回到数组头部,ArrayDeque
也是通过head
和tail
来标记队首和队尾,这里head
指头部元素的序号,tail
指可以添加下一个元素到尾部的序号,即最后一个元素的下一个序号。LinkedList
&LinkedBlockingQueue
&LinkedBlockingDeque
两者都是基于链表来实现,LinkedList
和LinkedBlockingDeque
的头节点或尾节点如果非空,则该节点的元素非空,而LinkedBlockingQueue
的头节点非空且节点的元素为空,也就是第二个节点才真正装载第一个元素,尾节点非空并装载最后一个元素,当尾节点和头节点是同一个节点时,尾节点的元素也可以是空。ArrayList
&PriorityQueue
对ArrayList
进行排序之后,所有元素是全排序的。而PriorityQueue
的优先级排序并非是全排序,仅仅是符合小根堆的结构,即父节点小于子节点,所以每次获取到的头节点都是权值最小的。Vector
与CopyOnWriteArrayList
Vector与CopyOnWriteArrayList简单比较分析ArraySet
&ArrayMap
Android内存优化-----使用ArrayMap/ArraySet代替HashMap/HashSet