数据结构
限量发行x
限量发行
展开
-
HashMap与HashTable的对比分析
前言 前一段时间分析Java collection中间一些数据结构代码的时候,单独把HashMap的实现做了一个分析(见链接)。以前看到很多人讨论问题的时候,会把HashMap和HashTable放在一起对比和分析。最开始的时候觉得他们两者的差别很小,网上也有很多浅显的解答。后来结合一些细节分析的时候,发现他们也存在许多细节上的差异,有的也许是针对不同应用的考量,有的也许是由于历史原转载 2016-05-10 17:04:30 · 343 阅读 · 0 评论 -
java集合类深入分析之PriorityQueue
PriorityQueue介绍 在平时的编程工作中似乎很少碰到PriorityQueue(优先队列) ,故很多人一开始看到优先队列的时候还会有点迷惑。优先队列本质上就是一个最小堆。前面一篇文章介绍了堆排序和堆的性质。而堆又是什么呢?它是一个数组,不过满足一个特殊的性质。我们以一种完全二叉树的视角去看这个数组,并用二叉树的上下级关系来映射到数组上面。如果是最大堆,则二叉树的顶点是保存的转载 2016-05-11 16:29:00 · 890 阅读 · 0 评论 -
遍历hashMap、hashSet、Hashtable
一.遍历HashMapMap map = new HashMap(); for(int i=0;i<100;i++) { map.put(i, "123"); }方法一:效率比方法二高for(Entry entry:map.entrySet()) { System.out.println(entry.getKey()+"="+entry.ge原创 2016-05-17 17:40:15 · 425 阅读 · 0 评论 -
LeetCode - Minimum Depth of Binary Tree
原题链接:http://oj.leetcode.com/problems/minimum-depth-of-binary-tree/ 这道题是树的题目,其实跟Maximum Depth of Binary Tree非常类似,只是这道题因为是判断最小深度,所以必须增加一个叶子的判断(因为如果一个节点如果只有左子树或者右子树,我们不能取它左右子树中小的作为深度,因为那样会是0,我们只有在叶原创 2016-06-02 14:45:30 · 321 阅读 · 0 评论 -
判断一个单链表是否有环及环的连接点
给定一个单链表,只给出头指针h:1、如何判断是否存在环?2、如何知道环的长度?3、如何找出环的连接点在哪里?4、带环链表的长度是多少? 解法:1、对于问题1,使用追赶的方法,设定两个指针slow、fast,从头指针开始,每次分别前进1步、2步。如存在环,则两者相遇;如不存在环,fast遇到NULL退出。2、对于问题2,记录下问题1的碰转载 2016-05-09 10:03:13 · 821 阅读 · 0 评论 -
java集合类深入分析之Queue篇
简介 Queue是一种很常见的数据结构类型,在Java里面Queue是一个接口,它只是定义了一个基本的Queue应该有哪些功能规约。实际上有多个Queue的实现,有的是采用线性表实现,有的基于链表实现。还有的适用于多线程的环境。java中具有Queue功能的类主要有如下几个:AbstractQueue, ArrayBlockingQueue, ConcurrentLinkedQu转载 2016-05-11 16:20:19 · 14986 阅读 · 3 评论 -
java集合类深入分析之TreeMap/TreeSet篇
简介 TreeMap和TreeSet算是Java集合类里面比较有难度的数据结构。和普通的HashMap不一样,普通的HashMap元素存取的时间复杂度一般是O(1)的范围。而TreeMap内部对元素的操作复杂度为O(logn)。虽然在元素的存取方面TreeMap并不占优,但是它内部的元素都是排序的,当需要查找某些元素以及顺序输出元素的时候它能够带来比较理想的结果。可以说,TreeMa转载 2016-05-11 16:26:18 · 563 阅读 · 0 评论 -
java stack的详细实现分析
简介 我们最常用的数据结构之一大概就是stack了。在实际的程序执行,方法调用的过程中都离不开stack。那么,在一个成熟的类库里面,它的实现是怎么样的呢?也许平时我们实践的时候也会尝试着去写一个stack的实现玩玩。这里,我们就仔细的分析一下jdk里的详细实现。Stack 如果我们去查jdk的文档,我们会发现stack是在Java.util这个包里。它对应的一转载 2016-05-11 16:00:53 · 16531 阅读 · 0 评论 -
java collections集合类总结:概述
简介 在java的包java.util和java.util.concurrent里面定义了java的集合类框架。我们大部分日常使用到的数据结构都可以在这里找到一个对应的实现。在以往的学习过程中可能会接触过一些具体的结构。但是对于java集合类框架来说,他里面包含有哪些类别的结构呢?对于不同的结构,他们分别适用于哪些应用场景?集合类框架中这些类之间是否有着某种关系呢?在这里,我们尝试对转载 2016-05-10 10:00:06 · 665 阅读 · 0 评论 -
java集合类深入分析之List篇
简介 在List中最常用的两个类就数ArrayList和LinkedList。他们两个的实现代表着数据结构中的两种种典型:线性表和链表。在这里,这个线性表是可以根据需要自动增长的。Java的库里面默认没有实现单链表,LinkedList实际上是一个双链表。这些具体的细节我们会在后续的代码里分析。 实际上,ArrayList和LinkedList他们之间的整体类关系图如下转载 2016-05-10 10:21:41 · 2971 阅读 · 0 评论 -
java集合类深入分析之HashSet, HashMap篇
简介 Map和Set是比较常用的两种数据结构。我们在平常的编程中经常会用到他们。只是他们的内部实现机制到底是怎么样的呢?了解他们的具体实现对于我们如何有效的去使用他们也是很有帮助的。在这一篇文章里,已经对HashMap, HashSet的实现做了一个详细的讨论。这里主要是针对Map, Set这两种类型的数据结构规约和典型的HashMap,HashSet实现做一个讨论。Ma转载 2016-05-10 17:14:55 · 351 阅读 · 0 评论 -
通过分析 JDK 源代码研究 Hash 存储机制
HashMap 和 HashSet 是 Java Collection Framework 的两个重要成员,其中 HashMap 是 Map 接口的常用实现类,HashSet 是 Set 接口的常用实现类。虽然 HashMap 和 HashSet 实现的接口规范不同,但它们底层的 Hash 存储机制完全一样,甚至 HashSet 本身就采用 HashMap 来实现的。实际上,HashS转载 2016-05-10 18:21:43 · 384 阅读 · 0 评论 -
深入Java集合学习系列:Hashtable的实现原理
我们先对Hashtable有个整体认识,然后再学习它的源码,最后再通过实例来学会使用Hashtable。第1部分 Hashtable介绍第2部分 Hashtable数据结构第3部分 Hashtable源码解析(基于JDK1.6.0_45)第4部分 Hashtable遍历方式第5部分 Hashtable示例转载请注明出处:http://www.cnblogs.com/转载 2016-05-11 15:39:59 · 670 阅读 · 0 评论 -
深入Java集合学习系列:HashSet的实现原理
1. HashSet概述: HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持。它不保证set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null元素。 2. HashSet的实现: 对于HashSet而言,它是基于HashMap实现的,HashSet底层使用HashMap来保存所有元素,因此HashSet转载 2016-05-11 15:41:37 · 258 阅读 · 0 评论 -
深入Java集合学习系列:LinkedHashSet的实现原理
1. LinkedHashSet概述: LinkedHashSet是具有可预知迭代顺序的Set接口的哈希表和链接列表实现。此实现与HashSet的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序可为插入顺序或是访问顺序。 注意,此实现不是同步的。如果多个线程同时访问链接的哈希Set,而其中至少一个线程修改了该Set,则它必转载 2016-05-11 15:42:42 · 350 阅读 · 0 评论 -
Java集合类总结
扩容1.使用位运算计算size//ArrayList首次扩容1.5倍 int newCapacity = oldCapacity + (oldCapacity >> 1); //Hashmap 每次扩容2倍 capacity 2.大部分首次扩容两倍,特列:ArrayList首次扩容1.5倍3.HashMap的默认装载因子为0.754.HashSet是基于Hash原创 2016-06-01 20:47:58 · 348 阅读 · 0 评论