猫侠的小窝

一步一步,盖个大房子……

内存泄漏定位与处理

内存泄漏定位与处理


ANR定位与处理

ANR定位与处理

ANR产生原因 UI线程响应超时就会产生ANR。具体地说,ANR可分为三个场景: View的触摸事件在5s内没有得到响应; BroadcastReceiver的onReceive()运行在UI线程,在10s内没有处理完; Service的各个生命周期运行在UI线程,在20s内没有处理完。 ANR代码定位 可以通过分析data/anr/traces.txt文件得到相关信息。...

逆序

单链表逆序、数组逆序

单链表逆序 Node invertList(Node head) { if (head == null || head.next == null) return head; Node newHead = null; Node nextNode = null; while (head != null) { nextNod...

遍历二叉树

遍历二叉树

前序、中序、后序是深度优先遍历的特例 前序遍历递归实现 void preOrderTraverse(Node root) { if (root == null) return; System.out.println(root.data); preOrderTraverse(root.lchild); preOrderTraverse(root.rchild...

单例模式

单例模式

饿汉模式 public class Singleton { // 因实例跟随类加载而生成,故称饿汉模式 private static Singleton s = new Singleton(); private Singleton(){} public static getInstance(){ return s; } } 懒汉模式 public class Sing...

单线程Lru缓存

单线程Lru缓存

思路 Lru缓存一般利用LinkedHashMap,accessOrder置为true,则自动按照访问顺序排序,最近访问的排在前面。 实现 public abstract class LruCache<T> { // 缓存的容器 private final LinkedHashMap<String, T> cache = new LinkedHas...

堆排序

堆排序

思路 利用大顶推或小顶堆自身的排序性质来排序。 把待排序数组构造成一个大顶堆; 大顶堆的根即为最大值,把它和末位元素交换,并且不参与之后的调整; 调整新的大顶堆,使它符合堆定义; 递归2、3步。 平均时间复杂度:O(N*logN) 实现 private void adjustHeap(int []arr,int i,int length){ int temp = ...

快速排序

快速排序

思路 先从数列中取出一个数作为key值。 将比这个数小的数全部放在它的左边,大于或等于它的数全部放在它的右边。 对左右两个小数列重复第二步,直至各区间只有1个数。 平均时间复杂度:O(N*logN) 实现 void quick_sort(const int* a, int l, int r){ while(l < r){ int i = so...

插入排序

插入排序

思路 前2个元素排序:把第2个元素放到“前1个元素组成的有序数组”中。 前3个元素排序:把第3个元素放到“前2个元素组成的有序数组”中。 前4个元素排序:把第4个元素放到“前3个元素组成的有序数组”中。 …… 前n个元素排序:…… 平均时间复杂度:O(n2) 实现 void insert_sort(const int* a, int length){ fo...

选择排序

选择排序

思路 确定第1位:从0~length-1中找出最小的数,与第1位的元素交换位置。 确定第2位:从1~length-1中找出最小的数,与第2位的元素交换位置。 …… 确定第n-1位:…… 从?~?中找出最小的数的思路是:声明int min记录最小值;遍历数组,当元素比min小时,把元素赋值给min;遍历结束时,min即为最小值。 平均时间复杂度:O(n2) 实现 vo...