LeetCode:种花问题实现与优化
快速排序算法分析与实现
基本思路
使用分治思想。选择一个Pivot,把小于Pivot的放到Pivot左边,大于Pivot的放到Pivot右边。之后继续对Pivot分隔开的左右两侧做相同的操作,直到所有元素有序。
Java引用类型简介与应用
Java引用类型
Java中有四种引用类型。其中SoftReference、WeakReference、PhantomReference构造时都可以指定ReferenceQueue,当目标对象 (Referent) 被回收时,Reference会被添加到队列中。
Java数据结构与集合学习笔记
常用集合与分类
-
Collection
- List:按顺序保存元素。
- ArrayList:数组实现,随机访问性能好。
- LinkedList:双向链表实现,插入删除性能好。
- Set:不添加重复元素。
- HashSet:快速查找元素,由HashMap实现。元素须定义
hashCode()
和equals()
方法。 - LinkedHashSet:快速查找元素+链表维护读写顺序,由LinkedHashMap实现。元素须定义
hashCode()
和equals()
方法。 - TreeSet:有序Set,由TreeMap实现。元素须实现
Comparable
接口。
- HashSet:快速查找元素,由HashMap实现。元素须定义
- Queue:队列,先进先出。
- Deque:双端队列 (double-ended queue)。
- ArrayDeque:数组实现,头尾指针在数组中循环移动,性能好。
- LinkedList:双向链表实现。
- PriorityQueue:插入后排序元素,使用堆实现,队列头部默认为最小的元素(自然顺序)。
- Deque:双端队列 (double-ended queue)。
- List:按顺序保存元素。
-
Map
- HashMap:散列表实现,根据Key存取关联的Value。
- LinkedHashMap:HashMap+双向链表维护读写顺序。默认是维护最后写入的顺序,也可以指定为读取排序 (accessOrder),使用LRU算法实现。
- TreeMap:根据key进行排序,使用红黑树实现。插入时找到key对应的节点并替换value,没找到则生成新节点。
Java线程相关基础知识梳理
SparseArray源码分析与性能优化
SparseArray是Android提供的数据结构,在某些场景下可以替代HashMap实现更好的性能。SparseArray在Android Java Framework源码中有大量使用。
SparseArray系列主要有:
基于AOP思想的Android方法耗时开源分析工具TimeTracer
一种基于动态代理实现的Android/Java总线通信组件
背景
在Android开发中,经常需要在不同的组件之间通信。函数调用就可以看成是一种通信,调用者和被调用的函数是消息的发送方和接收方,参数和返回值是消息内容。除了直接调用以外,比较常见的就是总线形式的通信。