phantomVK

Cease to struggle and you cease to live.

Java源码系列(14) -- CopyOnWriteArrayList

一、类签名 ArrayList 在多线程操作下是不安全的,为此应使用 CopyOnWriteArrayList。通过CopyOnWrite(简称COW,写时复制)策略,所有读取共享同一个数组对象,修改时另拷贝出新数组,操作在新数组完成后再替换掉旧数组。 1 2 public class CopyOnWriteArrayList<E> implements List&l...

Java源码系列(13) -- TreeSet

一、类签名 TreeSet通过实现NavigableSet接口支持导航能力,方法又主要基于TreeMap的能力。TreeSet的方法没有添加锁保护,所以多线程操作不安全。本文源码来自JDK10。 1 2 public class TreeSet<E> extends AbstractSet<E> implements NavigableSet<E&g...

Java源码系列(12) -- WeakHashMap

一、类签名 WeakHashMap的元素Entry继承自WeakReference,当元素没有外部引用或因虚拟机内存不足而回收,元素会被放入到queue。虽然WeakHashMap和HashMap拥有相同父类,但在具体实现上HashMap有更好的优化,和WeakHashMap更相似反倒是HashTable,不过线程不安全。 1 2 3 public class WeakHashMap&l...

Java源码系列(11) -- LinkedHashMap

一、类签名 LinkedHashMap<K,V>继承自HashMap<K,V>,可知存入的节点key永远是唯一的。可以通过Android的LruCache了解LinkedHashMap用法。 1 2 3 public class LinkedHashMap<K,V> extends HashMap<K,V> implemen...

Java源码系列(10) -- Hashtable

一、类签名 Hashtable是早期的哈希表实现,新版JDK几乎没作修改 1 2 3 public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, java.io.Serializable Hashtable和HashMap...

Java源码系列(9) -- HashMap

一、摘要 HashMap是使用频率高、用于保存键值对映射的容器类。自JDK8始HashMap引入红黑树,调整优化哈希算法,性能相比JDK7有进一步提升。同时,对JDK7中存在多线程操作导致死循环的问题进行修复。本文基于JDK10的源码进行介绍,代码格式进行轻微调整以便阅读。 相关阅读: Java源码系列(10) – Hashtable Java源码系...

Android源码系列(11) -- HandlerThread

一、类签名 HandlerThread是Android提供的封装类,父类是Thread。HandlerThread实例包含一个Looper并用于构建Handler。由于这是一个线程类,所以必须通过Thread.start()启动线程。 1 public class HandlerThread extends Thread 二、数据成员 线程优先级 1 int mPriority;...

Java switch不支持基本类型long

原文 内容摘自 “The Java Virtual Machine Specification Java SE 10 Edition” PDF, Page57 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 4...

ViewPager禁止滚动

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 // Override to catch pointerIndex out of range exception // when ViewPager used with a multi-touch Ph...

getResources().getDrawable() is deprecated

方案A (推荐): 获取带主题属性的drawable,主题配置来自当前Activity: 1 ContextCompat.getDrawable(getActivity(), R.drawable.name); 方案B: 获取不带主题属性的drawable: 1 ResourcesCompat.getDrawable(getResources(), R.drawable.name...

HTTP持久连接的优点 - RFC2616

原文 RFC 2616: Hypertext Transfer Protocol – HTTP/1.1 (deprecated) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 Persistent HTTP connections have a number of advantages: -...

Android Drawable tint方法

方法 通过PorterDuffColorFilter和setTint兼容各版本系统,实测Android 4.3和Android 5.1。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 // Tints the drawable by color int. fun Drawable?.tint(@ColorInt tint: Int): Drawable? { ...

LifecycleOwner类型转换异常

对客户集成SDK提供技术支持的时候,客户源码工程编译没有报错,但运行过程SDK出现Fragment没法转型为LifecycleOwner的异常并导致Crash。推测可知运行时Fragment没有实现LifecycleOwner接口,向上转型失败了。 Activity出现ClassCastException: 带Fragment的Activity出现ClassCastException...

RecyclerView索引溢出异常

使用RecyclerView过程中遇到异常: 1 java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter positionViewHolder 继承并重写LinearLayoutManager.onLayoutChildren()方法 1 2 3 4 5 6 7 ...

Android源码系列(10) -- SparseArray

一、前言 SparseArrays是Android提供的稀疏数组,用于代替HashMap容器类。准确说,是在一部分场景中代替HashMap<Integer, Object>,提供从int映射到Object的能力,优点是具有高效的内存利用率。 1 public class SparseArray<E> implements Cloneable SparseArr...