基本思路

使用分治思想。选择一个Pivot,把小于Pivot的放到Pivot左边,大于Pivot的放到Pivot右边。之后继续对Pivot分隔开的左右两侧做相同的操作,直到所有元素有序。

阅读全文 »

Java引用类型

Java中有四种引用类型。其中SoftReference、WeakReference、PhantomReference构造时都可以指定ReferenceQueue,当目标对象 (Referent) 被回收时,Reference会被添加到队列中。

阅读全文 »

常用集合与分类

  • Collection

    • List:按顺序保存元素。
      • ArrayList:数组实现,随机访问性能好。
      • LinkedList:双向链表实现,插入删除性能好。
    • Set:不添加重复元素。
      • HashSet:快速查找元素,由HashMap实现。元素须定义 hashCode()equals() 方法。
      • LinkedHashSet:快速查找元素+链表维护读写顺序,由LinkedHashMap实现。元素须定义 hashCode()equals() 方法。
      • TreeSet:有序Set,由TreeMap实现。元素须实现 Comparable 接口。
    • Queue:队列,先进先出。
      • Deque:双端队列 (double-ended queue)。
        • ArrayDeque:数组实现,头尾指针在数组中循环移动,性能好。
        • LinkedList:双向链表实现。
      • PriorityQueue:插入后排序元素,使用堆实现,队列头部默认为最小的元素(自然顺序)。
  • Map

    • HashMap:散列表实现,根据Key存取关联的Value。
    • LinkedHashMap:HashMap+双向链表维护读写顺序。默认是维护最后写入的顺序,也可以指定为读取排序 (accessOrder),使用LRU算法实现。
    • TreeMap:根据key进行排序,使用红黑树实现。插入时找到key对应的节点并替换value,没找到则生成新节点。
阅读全文 »

SparseArray是Android提供的数据结构,在某些场景下可以替代HashMap实现更好的性能。SparseArray在Android Java Framework源码中有大量使用。

SparseArray系列主要有:

阅读全文 »

背景

在Android开发中,经常需要在不同的组件之间通信。函数调用就可以看成是一种通信,调用者和被调用的函数是消息的发送方和接收方,参数和返回值是消息内容。除了直接调用以外,比较常见的就是总线形式的通信。

阅读全文 »