LinYaoTian's Blog

ListView 与 RecyclerView 缓存对比

相关知识: ListView 和 RecyclerView 的缓存机制原理大致相似,如下图所示: 过程中,离屏的ItemView即被回收至缓存,入屏的ItemView则会优先从缓存中获取,只是ListView与RecyclerView的实现细节有差异。(这只是缓存使用的其中一个场景,还有如刷新等) 缓存机制对比1.层级不同RecyclerView 比 ListView 多了两层缓存,支持多......

RecyclerView 缓存解析

RecyclerView 和 ListView 的回收机制非常相似,但是 ListView 是以 View 作为单位进行回收,RecyclerView 是以 ViewHolder 作为单位进行回收。相比于 ListView,RecyclerView 的回收机制更为完善。 Recycler 是 RecyclerView 回收机制的实现类,他实现了四级缓存: mAttachedScrap: 缓......

ListView 缓存解析

AbsListView继承关系 从继承关系中可以看出,GridView 和 ListView 都是继承自 AbsListView,因此两者在工作原理和实现上都是有很多共同点的,而缓存逻辑应为 GridView 和 ListView 共有的,因此缓存应该是在 AbsListView 中实现的。 Adapter 的作用顾名思义,Adapter 是适配器的意思,它的作用是在 ListView 和数......

Android 自定义 View 之 LeavesLoading

1.前言前天的浏览 GitHub 时发现一个模仿 Gif 的 Loading 特效的项目,感觉效果很不错,也比较有创意,如下: GitHub 上好几个做这个效果的项目,但是很少有完全实现的,有的还有 Bug,于是花了 2 天实现了一下。 效果如下: GitHub 项目在这里 LeavesLoading 2. 分析实现要求: 叶子 随机产生 飘动轨迹为正弦函数,并且随机振幅 飘动时伴随......

TreeMap

TreeMap是基于红黑树(一种自平衡的二叉查找树)实现的一个保证有序性的Map。 123public class TreeMap<K,V> extends AbstractMap<K,V> implements NavigableMap<K,V>, Cloneable, java.io.Serializable{} TreeMa......

Set

Set集合不包含重复的元素,这是使用Set的主要原因。有三种常见的Set实现——HashSet, TreeSet和LinkedHashSet。什么时候使用它们,使用哪个是个重要的问题。 总体而言: 如果你需要一个访问快速的Set,你应该使用HashSet; 当你需要一个排序的Set,你应该使用TreeSet; 当你需要记录下插入时的顺序时,你应该使用LinedHashSet HashSe......

LinkedHashMap源码分析

简介继承关系图: 可以看出,LinkedHashMap继承了HashMap,具有HashMap的所有功能;此外它还实现了一个Map接口,用来改造节点Entry<K,V>,此实现与HashMap的不同之处在于它维护了一个贯穿其所有条目的双向链表。 此链表定义了迭代顺序,通常是键插入映射的顺序。 请注意,如果将键重新插入LinkedHashMap,不会影响插入顺序。 特点: 不是......

ConcurrentHashMap源码分析

简介HashMap 和 LinkedHashMap 都是线程不安全的,要实现使用线程安全的Map,可以有以下几个选项: Hashtable:Hashtable是遗留类,很多映射的常用功能与HashMap类似,不同的是它承自Dictionary类,并且是线程安全的,任一时间只有一个线程能写Hashtable(synchrionized ),并发性不如ConcurrentHashMap,因为C......

HashMap源码分析

简介Java为数据结构中的映射定义了一个接口java.util.Map,此接口主要有四个常用的实现类,分别是HashMap、Hashtable、LinkedHashMap和TreeMap,类继承关系如下图所示: 下面针对各个实现类的特点做一些说明: (1) HashMap:它根据键的hashCode值存储数据,大多数情况下可以直接定位到它的值,因而具有很快的访问速度,但遍历顺序却是不确定的......

LinkedList源码分析

简介特点: LinkedList底层是链表结构 插入和删除比较快(O(1)),查询则相对慢一些(O(n)) 因为是链表结构,所以分配的空间不要求是连续的 继承关系: 源码定义: 123public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>......