Android-数据结构

前言

Linus Benedict Torvalds : RTFSC – Read The Funning Source Code

SparseArray

SparseArrays map integers to Objects. Unlike a normal array of Objects, there can be gaps in the indices. It is intended to be more memory efficient than using a HashMap to map Integers to Objects, both because it avoids auto-boxing keys and its data structure doesn’t rely on an extra entry object for each mapping.
翻译:SparseArrays 将 integers 映射到 Objects。与正常的数组不同,它允许在数组中有间隙。它的目的是比一般使用 HashMap 对内存的使用更加优化。因为它每个键值对避免了自动拆包键值和它的数据结构不依赖额外的条目封装。

核心:

  1. 存储方式:稀疏矩阵。
  2. 查找方式:折半查找函数。

通过数组数据结构来保存映射,然后利用折半查找来找到对象。

优点:

  1. 减少了对内存的使用,并且数据结构不会依赖于外部对象映射。

缺点:

  1. 有一定的性能上的消耗的,并不适合当成包含大量元素的容器。
  2. 不是线程安全的。
  3. 插入数据按 key 大小顺序插入,使用对 key 进行二分查找。查找效率上不如 HashMap。
  4. 对删除做了一个优化,不会直接立即删除一个元素,而是把该位置的值设置成 DELETED,尝试 reuse。

SparseArray详解

ArrayList

Resizable-array implementation of the List interface. Implements all optional list operations, and permits all elements, including null. In addition to implementing the List interface, this class provides methods to manipulate the size of the array that is used internally to store the list. (This class is roughly equivalent to Vector, except that it is unsynchronized.)
翻译:List接口的可调整大小的数组实现。 实现所有可选列表操作,并允许所有元素,包括null。 除了实现List接口之外,该类还提供了一些方法来操作在内部使用来存储列表的数组的大小。 (这个类大致相当于Vector,除了它是不同步的。)

核心:

  1. 存储方式:数组实现。
  2. 查找方式:并无优化查找方式。

优点:

  1. 基于数组实现,对于遍历来说方便于查找和添加。

缺点:

  1. 对于从中间删除的效率太差。
  2. 非线程安全,在多线程情况下容易导致崩溃。
  3. 在增长的时候把原容器内容拷贝到新容器在大数据的情况下会耗时长,而且浪费旧的容器内存。

ArrayList详解

LinkedList

Doubly-linked list implementation of the List and Deque interfaces. Implements all optional list operations, and permits all elements (including null).
翻译:双向连接链表实现了ListDeque的接口,实现了所有可选列表操作并允许所有元素包括null。

核心:

  1. 存储方式:链表实现。
  2. 查找方式:从头沿着指针方向查找。

优点:

  1. 对于增加、删除、移动效率都非常高。

缺点:

  1. 因为是链表,如果链表过大,查找将会非常耗时。
  2. 非线程安全,多线程情况下容易出问题。

LinkedList详解