数据结构
fengluoye2012
理解是一个循序渐进的过程
展开
-
ArrayList及同类比较
介绍特性:元素可重复,容许null,查询效率高,插入和删除效率低,线程不安全; 主要用到下面两个方法: Arrays.copyOf(T[] original, int newLength);根据newLength创建了一个新的数组,然后调用System.arraycopy()将原数组original内容复制到新数组中,并且将新数组返回; System.arraycopy...原创 2018-08-31 17:50:28 · 736 阅读 · 0 评论 -
查找二叉树的实现
简介不了解相关概念可先阅读 数据结构-树定义及分类树集合了数组(查找速度快)和链表(插入、删除速度快)的优点;二叉搜索树的效率:树的大部分操作需要从上至下一层层的查找树的节点,对于一棵满树,大约有一半的节点处于最底层(最底层节点数 = 其它层节点数的和 + 1),故节点操作大约有一半需要找到最底层节点,大约有四分之一的节点处于倒数第二层,故节点操作大约有四分之一需要找到倒数第二层节点,依此...原创 2018-10-22 16:52:16 · 354 阅读 · 0 评论 -
数据结构-树定义及分类
简介树状图是一种数据结构,它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:每个节点有零个或多个子节点;没有父节点的节点称为根节点;每一个非根节点有且只有一个父节点;除了根节点外,每个子节点可以分为多个不相交的子树;定义树(tree)是包含n(n>0)个结点的有穷集...原创 2018-10-22 16:11:38 · 1576 阅读 · 0 评论 -
ArrayMap的源码分析
简介ArrayMap是一个<key,value>映射的数据结构,它设计上更多的是考虑内存的优化,内部是使用两个数组进行数据存储,一个数组记录key的hash值,另外一个数组记录Value值;在数据量不大的情况下,用来代替HashMap;int[] mHashes;是key的hash值的数组;Object[] mArray;是key,value数组,这两个值的下标和mHashes的...原创 2018-10-22 15:38:20 · 250 阅读 · 0 评论 -
LinkedBlockingQueue源码分析
简介LinkedBlockingQueue以链表(单链表)为基础实现的队列,先进先出,head是队列中存在最久的元素,tail是最新加入的元素,添加元素从队尾添加;删除元素,从队头删除;不容许插入null;线程安全,用ReentrantLock实现线程安全;用法和ArrayBlockingQueue一致AtomicInteger类AtomicInteger,一个提供原子操作的Intege...原创 2018-09-21 21:14:17 · 187 阅读 · 0 评论 -
ArrayBlockingQueue源码分析
简介队列(Queue)的实现方式主要有两种,一种是以数组来实现的;另一种是以链表的来实现的。ArrayBlockingQueue是以固定长度的数组实现的,先进先出;head是队列中存在最久的元素,tail是最新加入的元素,添加元素从队尾添加;删除元素,从队头删除;不容许插入null;线程安全,用ReentrantLock实现线程安全;final Object[] items:元素数组;...原创 2018-09-21 21:07:18 · 152 阅读 · 0 评论 -
LinkedHashMap及其应用LruCache
LinkedHashMap简介LinkedHashMap是HashMap的子类;在HashMap的基础上又用双向链表来实现的;换句话说:LinkedHashMap的所有元素不仅满足HashMap的数据结构,同时满足LinkedList的结构,维护着这两套实现方式;LinkedHashMap类主要是维护双向链表,其他的工作主要还是在HashMap中实现;LinkedHashMap...原创 2018-08-31 18:20:14 · 449 阅读 · 0 评论 -
HashMap源码分析
简介HashMap的key,value都可以为null;是由数组+链表实现的;无序的,线程不安全;HashMap对于手机端而言,对内存的占用比较大;某些情况下,可以用ArrayMap,SparseMap替代;插入操作put(),putAll()put()方法 key是唯一的,同一个key只能存在一个,再次put()会改变原来的值; public V put(K key, ...原创 2018-08-31 18:10:06 · 201 阅读 · 0 评论 -
LinkedList源码分析
简介双向链表,线程不安全,在内存中不连续存储,不仅实现了List接口,也实现了Deque接口;transient Node first;头结点 transient Node last;尾节点插入操作:add(E e):在链表尾节点后插入新的节点,作为尾结点;public boolean add(E e) { linkLast(e); return true...原创 2018-08-31 18:04:14 · 118 阅读 · 0 评论 -
单链表的具体实现
前言链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接顺序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比线性表顺序表快得多,但是查找...原创 2018-10-26 18:15:50 · 189 阅读 · 0 评论