
数据结构
文章平均质量分 80
zhujm320
这个作者很懒,什么都没留下…
展开
-
SparseArray源码浅析
介绍 SparseArray是android特有的轻量级数据结构,类似于hashmap以键值对的方式进行存储,但是key类型为int,key-value分别采用数组进行存储,采用二分法进行查询,具有很高的查询效率(时间复杂度O(logn)),但是插入和删除效率比较低(需要移动数组), 不适合大量数据的情况。 图示 从上图中可以看出,key-value分别存储在Key数据和Value数组中,它们有者共同的索引。插入,删除,查询操作,遍历key数组通过二分查找法,找到k...原创 2021-06-24 23:41:37 · 338 阅读 · 1 评论 -
JDK1.8 LinkedBlockingQueue类说明
介绍 LinkedBlockingQueue是一种基于链表实现的阻塞队列,它实现了BlockingQueue的接口,线程安全。LinkedBlockingQueue初始化时,可以不指定大小,不指定大小默认大小为Integer.MAX_VALUE,属于无界队列。使用时建议初始化一个大小,避免LinkedBlockingQueue元素过大,将系统内存耗光。 关于队列的实现原理请参考 队列实现原理和JDK1.8 BlockingQueue接口说明,链表原理参考 设计思想 在队头出队,在队尾入队,.原创 2021-04-21 23:40:05 · 298 阅读 · 2 评论 -
JDK1.8 ArrayBlockingQueue类说明
介绍 ArrayBlockingQueue是一种基于数组实现的阻塞队列,它实现了BlockingQueue的接口,线程安全。为了实现队列的入队和出队更高的效率,采用了环形队列的形式,环形队列在入队和出队时的时间复杂度为O(1)。ArrayBlockingQueue初始化时,需要指定队列的大小,属于有界队列。 关于队列的实现原理请参考 队列实现原理和JDK1.8 BlockingQueue接口说明 功能解读 成员属性 /** 队列元素存放数组 */ final Object[] items原创 2021-04-13 22:28:47 · 211 阅读 · 1 评论 -
JDK1.8 BlockingQueue接口说明
介绍 BlockingQueue阻塞队列接口,定义了实现规范,线程安全。方便生成者和消费者模型使用,使用BlockingQueue时,开发者不需要考虑线程安全问题,将精力集中到业务实现即可。实际使用中,以生产者和消费者模型为例,分为三种情况: 1. 队列为空,生产者存入数据,消费者阻塞;2. 队列满,生产者阻塞,消费者拉取数据;3.队列非空非满,生产者可以存入数据,消费者也可以拉取数据。 队列实现原理参考 接口介绍 入队操作 boolean add(E e); 添加一个元素到队尾,成功时.原创 2021-04-12 12:51:53 · 211 阅读 · 0 评论 -
队列实现原理
介绍 队列(Queue)是限定仅在表尾插入,表头删除操作的线性表或者链表。head和rear指针分别指向对头和队尾。 实现原理 基本模型 队列从一端插入元素,另外一端移除元素,实现先进先出。 插入操作 空队列, 空队列head和rear指针指向相同的位置 插入1一个元素,head指针不变,rear指针移动一个位置,时间复杂度为O(1) 陆续插入元素,直到队列最大容量,那么队列满了 队列长度: rear - head 移除操作 移除操作,将元素从队列头部弹出,头指针.原创 2021-04-03 20:44:05 · 746 阅读 · 3 评论 -
JDK1.8 Stack实现原理
简介原创 2021-03-30 23:40:46 · 261 阅读 · 0 评论 -
JDK1.8 Vector实现原理
介绍 Vector是一个可动态扩展的线性表,底层实现是数组。 它的实现原理以及使用方式和ArrayList基本一致,不同点就是Vector是线程安全类,ArrayList非线程安全。 实现原理 增加元素: public synchronized boolean add(E e) { modCount++; ensureCapacityHelper(elementCount + 1); elementData[elementCount++] =...原创 2021-03-30 12:43:16 · 216 阅读 · 0 评论 -
JDK1.8 LinkedList原理
目录 介绍 实现原理 优缺点 类图原创 2021-03-23 23:33:52 · 278 阅读 · 0 评论 -
JDK1.8 ArrayList原理
介绍: ArrayList是一个可动态扩展的线性表,底层实现是数组。当往 ArrayList 中添加的元素数量大于其底层数组容量时,其会通过扩容机制重新生成一个更大的数组。由于基于数组实现,查找复杂度为O(1), 新增和删除复杂度为O(n)。本文主要介绍ArrayList的增删改查的实现原理。 实现原理: 增加元素: 数组尾部增加: 操作步骤: 1. 直接在当前数组大小后面插入一个元素 尾部添加在...原创 2021-03-21 16:09:09 · 230 阅读 · 0 评论