Android中常用的数据结构

interface Collection // 集,一组数据
|--> interface Set // 集合,不允许重复元素
|    |--> interface SortedSet // 对元素进行排序
|    |    |--> interface NavigableSet // 可获得离指定元素最近的元素
|    |    |    |--> class TreeSet // 使用TreeMap实现,非同步
|    |
|    |--> class HashSet // 使用HashMap实现,非同步
|    |    |--> class LinkedHashSet // 维护元素的添加顺序,使用LinkedHashMap实现,非同步
|    |
|    |--> class ArraySet // Android类,内存优化(相比于HashSet)
|
|
|--> interface List // 序列,可以控制元素的插入位置,通过序号访问元素,以及查找元素
|    |--> class ArrayList // 使用可变数组(resizable-array)实现,非同步
|    |--> class LinkedList // 使用双向链表(doubly-linked list)实现,非同步
|    |--> class Vector // 线程安全版ArrayList
|    |    |--> class Stack // LIFO
|
|
|--> interface Queue // 队列,FIFO(典型而非必须)
|    |--> interface BlockingQueue // 阻塞队列,线程安全
|    |    |--> class ArrayBlockingQueue // 基于数组的定长阻塞队列
|    |    |--> class LinkedBlockingQueue // 基于链表的定长或不定长阻塞队列
|    |    |--> class PriorityBlockingQueue // 基于堆(heap)的不定长阻塞队列
|    |    |--> class SynchronousQueue // 不存储元素的阻塞队列
|    |    |
|    |    |--> interface BlockingDeque // 双端阻塞队列
|    |    |    |--> class LinkedBlockingDeque // 基于链表的定长或不定长双端阻塞队列
|    |
|    |--> class PriorityQueue // 优先队列,元素保持优先级排列,基于堆(heap)实现,非同步	
|    |
|    |--> interface Deque // 双端队列(double ended queue)
|    |    |--> class ArrayDeque // 基于数组的双端队列
|    |    |--> class LinkedList // 基于链表的双端队列
|    |    |--> interface BlockingDeque

interface Map // 映射,不允许重复键值,一个键值对应最多一个数据
|--> interface SortedMap // 键全排序
|    |--> interface NavigableMap // 导航方法返回离给定查找目标最近的匹配
|    |    |--> class TreeMap // 使用红黑树实现
|
|--> class HashMap // 基于散列表(hash table,数组+链表,下同)实现,非同步
|    |--> class LinkedHashMap // 使用散列表和链表实现,维持一个双向链表来记录键值对的插入顺序,非同步
|
|--> class Hashtable // 线程安全版HashMap
|--> class IdentityHashMap // 使用散列表(数组)实现,比较键以及值时使用引用比较代替值比较
|--> class WeakHashMap // 使用散列表实现,其中键是弱引用
|
|--> class ArrayMap // Android类,内存优化(相比于HashMap)

class Collections // 作用于或返回集的工具类
class SparseArray // Android类,将整型映射至物件

简介:

  1. Collection
    boolean add(E e):确保该集包含指定元素,当该集发生变化时返回true
    boolean remove(Object o):从该集移除指定元素的一个实例,当该集包含指定元素时返回true
    boolean addAll(Collection c):添加指定集的所有元素至该集,当该集发生变化时返回true
    boolean removeAll(Collection c):从该集移除全部存在于指定集的元素,当该集发生变化时返回true
    boolean retainAll(Collection c):在该集中仅保留存在于指定集的元素,当该集发生变化时返回true

  2. Set
    boolean equals(Object o):当指定物件同样是个集合,两个集合大小一致,且该集合包含指定集合的每一个成员时返回true。该定义确保此方法适用于集合的不同实现。Overrides: equals in interface Collection

  3. SortedSet
    获取子集指的是得到子集的视图,对子集的修改会反映到该集,反之亦然。
    SortedSet subSet(E fromElement, E toElement):获取子集[fromElement, toElement)
    SortedSet headSet(E toElement):获取严格小于toElement的子集
    SortedSet tailSet(E fromElement):获取大于等于fromElement的子集
    E first():获取当前最小的元素
    E last():获取当前最大的元素

  4. 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():获得最大元素并移除

  5. List
    boolean equals(Object o):当且仅当指定物件同样是个序列,两个序列大小一致,且两个序列的所有对应元素也相等时返回true。换句话说,当两个序列有相同顺序的相同元素时定义为相等。该定义确保此方法适用于序列的不同实现。Overrides: equals in interface Collection
    E set(int index, E element):替代指定位置元素并返回旧元素
    E remove(int index):移除指定位置元素并返回旧元素
    List subList(int fromIndex, int toIndex):获取子序列[fromIndextoIndex),这里得到的是子序列的视图,对子序列的非结构性修改会反映到该序列,反之亦然。

  6. Vector
    boolean removeElement(Object obj):从该向量中移除参数的首次出现,功能上等同于remove(Object)

  7. Stack
    E peek():获取栈顶元素
    int search(Object o):返回离栈顶最近的相同元素至栈顶的距离,栈顶元素距离为1

  8. Queue
    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

  9. 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 c):从该队列移除所有可用元素并添加至给定集,返回传输元素的数目。
    BlockingQueue(阻塞队列)详解 - CSDN博客
    java并发学习之BlockingQueue实现生产者消费者 - CSDN博客

  10. PriorityQueue
    深入理解Java PriorityQueue - CarpenterLee - 博客园

  11. Deque
    void push(E e):往双端队列表现的栈推入元素,等价于addFirst
    E pop():从双端队列表现的栈推出元素,等价于removeFirst

  12. Map
    V put(K key, V value):将指定值联系至指定键,返回键联系的先前的值或null
    V remove(Object key):移除键对应的键值对,返回键联系的先前的值或null
    Set keySet():返回所有键的集合视图。
    Collection values():返回所有值的集视图。
    Set> entrySet():返回所有键值对的集合视图。
    boolean equals(Object o):当给定物件也是一个映射且两个映射包含相同键值对时返回true,该定义确保此方法适用于映射的不同实现。

  13. SortedMap
    以下方法的功能与SortedSet相应的方法类似:

SortedMap subMap(K fromKey, K toKey);
SortedMap headMap(K toKey);
SortedMap tailMap(K fromKey);
K firstKey();
K lastKey();
  1. NavigableMap
    Map.Entry lowerEntry(K key):返回严格小于给定键的最大键对应的键值对,当没有这样的键时返回null
    K lowerKey(K key):返回严格小于给定键的最大键,当没有这样的键时返回null
    NavigableSet navigableKeySet():返回所有键的可导航集合视图。
  2. TreeMap
    Java提高篇(二七)-----TreeMap - chenssy的博客 - CSDN博客
  3. HashMap
    Java8系列之重新认识HashMap - ImportNew
    (编者注:原文扩容机制中,key = 3、7、5,put顺序依次为 5、7、3有误,顺序应为3、7、5。)
  4. HashTable
    boolean contains(Object value):等价于boolean containsValue(Object value)
  5. SparseArray
    Android内存优化(使用SparseArray和ArrayMap代替HashMap)- CSDN博客
    类似的还有:
map key value
SparseArray int Object
SparseBooleanArray int boolean
SparseIntArray int int
SparseLongArray int long
LongSparseArray long Object

比较:

  1. ArrayList & ArrayBlockingQueue & ArrayDeque
    三者都是基于数组来实现,ArrayList在数组中间index位置插入和删除元素时,index后的元素都要通过System.arraycopy来搬动,而ArrayBlockingQueue通过takeIndexputIndex两个标志位来标记定长数组的实际队首和队尾,而且当标志位到达数组末尾时会返回到数组头部,ArrayDeque也是通过headtail来标记队首和队尾,这里head指头部元素的序号,tail指可以添加下一个元素到尾部的序号,即最后一个元素的下一个序号。
  2. LinkedList & LinkedBlockingQueue & LinkedBlockingDeque
    两者都是基于链表来实现,LinkedListLinkedBlockingDeque的头节点或尾节点如果非空,则该节点的元素非空,而LinkedBlockingQueue的头节点非空且节点的元素为空,也就是第二个节点才真正装载第一个元素,尾节点非空并装载最后一个元素,当尾节点和头节点是同一个节点时,尾节点的元素也可以是空。
  3. ArrayList & PriorityQueue
    ArrayList进行排序之后,所有元素是全排序的。而PriorityQueue的优先级排序并非是全排序,仅仅是符合小根堆的结构,即父节点小于子节点,所以每次获取到的头节点都是权值最小的。
  4. ArraySet & ArrayMap
    Android内存优化-----使用ArrayMap/ArraySet代替HashMap/HashSet

你可能感兴趣的:(学习笔记)