摘要: Hashtable简介 Hashtable同样是基于哈希表实现的,同样每个元素是一个key-value对,其内部也是通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长。 Hashtable也是JDK1.0引入的类,是线程安全的,能用于多线程环境中。 Hashtable同样实现了Seri 阅读全文
posted @ 2018-04-10 16:56 kdy 阅读(178) 评论(0) 推荐(0)
摘要: HashMap简介 HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长。 HashMap是非线程安全的,只是用于单线程环境下,多线程环境下可以采用concurrent并发包下的concurrentHashMa 阅读全文
posted @ 2018-04-10 16:53 kdy 阅读(267) 评论(0) 推荐(0)
摘要: LinkedList简介 LinkedList是基于双向循环链表(从源码中可以很容易看出)实现的,除了可以当做链表来操作外,它还可以当做栈、队列和双端队列来使用。 LinkedList同样是非线程安全的,只在单线程下适合使用。 LinkedList实现了Serializable接口,因此它支持序列化 阅读全文
posted @ 2018-04-10 16:47 kdy 阅读(167) 评论(0) 推荐(0)
摘要: ArrayList简介 ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存。 ArrayList不是线程安全的,只能用在单线程环境下,多线程环境下可以考虑用Collections.synchronizedList(List l)函数返回一 阅读全文
posted @ 2018-04-10 16:44 kdy 阅读(182) 评论(0) 推荐(0)
摘要: Java集合工具包位于Java.util包下,包含了很多常用的数据结构,如数组、链表、栈、队列、集合、哈希表等。学习Java集合框架下大致可以分为如下五个部分:List列表、Set集合、Map映射、迭代器(Iterator、Enumeration)、工具类(Arrays、Collections)。 阅读全文
posted @ 2018-04-10 16:40 kdy 阅读(87) 评论(0) 推荐(0)
摘要: 前面我们介绍了树这种数据结构,树是由n(n>0)个有限节点通过连接它们的边组成一个具有层次关系的集合,把它叫做“树”是因为它看起来像一棵倒挂的树,包括二叉树、红黑树、2-3-4树、堆等各种不同的树,有对这几种树不了解的可以参考我前面几篇博客。而本篇博客我们将介绍另外一种数据结构——图,图也是计算机程 阅读全文
posted @ 2018-04-10 14:49 kdy 阅读(217) 评论(0) 推荐(0)
摘要: 在Java数据结构和算法(五)——队列中我们介绍了优先级队列,优先级队列是一种抽象数据类型(ADT),它提供了删除最大(或最小)关键字值的数据项的方法,插入数据项的方法,优先级队列可以用有序数组来实现,这种实现方式尽管删除最大数据项的时间复杂度为O(1),但是插入还是需要较长的时间 O(N),因为每 阅读全文
posted @ 2018-04-10 14:47 kdy 阅读(158) 评论(0) 推荐(0)
摘要: Hash表也称散列表,也有直接译作哈希表,Hash表是一种根据关键字值(key - value)而直接进行访问的数据结构。它基于数组,通过把关键字映射到数组的某个下标来加快查找速度,但是又和数组、链表、树等数据结构不同,在这些数据结构中查找某个关键字,通常要遍历整个数据结构,也就是O(N)的时间级, 阅读全文
posted @ 2018-04-10 14:46 kdy 阅读(175) 评论(0) 推荐(0)
摘要: 通过前面的介绍,我们知道在二叉树中,每个节点只有一个数据项,最多有两个子节点。如果允许每个节点可以有更多的数据项和更多的子节点,就是多叉树。本篇博客我们将介绍的——2-3-4树,它是一种多叉树,它的每个节点最多有四个子节点和三个数据项。 1、2-3-4 树介绍 2-3-4树每个节点最多有四个字节点和 阅读全文
posted @ 2018-04-10 14:43 kdy 阅读(129) 评论(0) 推荐(0)
摘要: 上一篇博客我们介绍了二叉搜索树,二叉搜索树对于某个节点而言,其左子树的节点关键值都小于该节点关键值,右子树的所有节点关键值都大于该节点关键值。二叉搜索树作为一种数据结构,其查找、插入和删除操作的时间复杂度都为O(logn),底数为2。但是我们说这个时间复杂度是在平衡的二叉搜索树上体现的,也就是如果插 阅读全文
posted @ 2018-04-10 14:41 kdy 阅读(137) 评论(0) 推荐(0)
摘要: 接下来我们将会介绍另外一种数据结构——树。二叉树是树这种数据结构的一员,后面我们还会介绍红黑树,2-3-4树等数据结构。那么为什么要使用树?它有什么优点? 前面我们介绍数组的数据结构,我们知道对于有序数组,查找很快,并介绍可以通过二分法查找,但是想要在有序数组中插入一个数据项,就必须先找到插入数据项 阅读全文
posted @ 2018-04-10 14:39 kdy 阅读(227) 评论(0) 推荐(0)
摘要: 在Java数据结构和算法(三)——冒泡、选择、插入排序算法中我们介绍了三种简单的排序算法,它们的时间复杂度大O表示法都是O(N2),如果数据量少,我们还能忍受,但是数据量大,那么这三种简单的排序所需要的时间则是我们所不能接受的。接着我们在讲解递归 的时候,介绍了归并排序,归并排序需要O(NlogN) 阅读全文
posted @ 2018-04-10 14:34 kdy 阅读(175) 评论(0) 推荐(0)
摘要: 记得小时候经常讲的一个故事:从前有座山,山上有座庙,庙里有一个老和尚和一个小和尚,一天,老和尚给小和尚讲了一个故事,故事内容是“从前有座山,山上有座庙,庙里有一个老和尚和一个小和尚,一天,老和尚给小和尚讲了一个故事,故事内容......” 什么是递归,上面的小故事就是一个明显的递归。以编程的角度来看 阅读全文
posted @ 2018-04-10 14:26 kdy 阅读(176) 评论(0) 推荐(0)
摘要: 前面博客我们在讲解数组中,知道数组作为数据存储结构有一定的缺陷。在无序数组中,搜索性能差,在有序数组中,插入效率又很低,而且这两种数组的删除效率都很低,并且数组在创建后,其大小是固定了,设置的过大会造成内存的浪费,过小又不能满足数据量的存储。 本篇博客我们将讲解一种新型的数据结构——链表。我们知道数 阅读全文
posted @ 2018-04-10 14:15 kdy 阅读(210) 评论(0) 推荐(0)
摘要: 前面我们介绍了三种数据结构,第一种数组主要用作数据存储,但是后面的两种栈和队列我们说主要作为程序功能实现的辅助工具,其中在介绍栈时我们知道栈可以用来做单词逆序,匹配关键字符等等,那它还有别的什么功能吗?以及数据结构与本篇博客的主题前缀、中缀、后缀表达式有什么关系呢? 1、人如何解析算术表达式 如何解 阅读全文
posted @ 2018-04-10 14:13 kdy 阅读(223) 评论(0) 推荐(0)
摘要: 前面一篇博客我们讲解了并不像数组一样完全作为存储数据功能,而是作为构思算法的辅助工具的数据结构——栈,本篇博客我们介绍另外一个这样的工具——队列。栈是后进先出,而队列刚好相反,是先进先出。 1、队列的基本概念 队列(queue)是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除 阅读全文
posted @ 2018-04-10 14:09 kdy 阅读(212) 评论(0) 推荐(0)
摘要: 前面我们讲解了数组,数组更多的是用来进行数据的存储,纯粹用来存储数据的数据结构,我们期望的是插入、删除和查找性能都比较好。对于无序数组,插入快,但是删除和查找都很慢,为了解决这些问题,后面我们会讲解比如二叉树、哈希表的数据结构。 而本篇博客讲解的数据结构和算法更多是用作程序员的工具,它们作为构思算法 阅读全文
posted @ 2018-04-10 14:07 kdy 阅读(171) 评论(0) 推荐(0)
摘要: 上一篇博客我们实现的数组结构是无序的,也就是纯粹按照插入顺序进行排列,那么如何进行元素排序,本篇博客我们介绍几种简单的排序算法。 1、冒泡排序 这个名词的由来很好理解,一般河水中的冒泡,水底刚冒出来的时候是比较小的,随着慢慢向水面浮起会逐渐增大,这物理规律我不作过多解释,大家只需要了解即可。 冒泡算 阅读全文
posted @ 2018-04-10 14:06 kdy 阅读(213) 评论(0) 推荐(0)
摘要: 上篇博客我们简单介绍了数据结构和算法的概念,对此模糊很正常,后面会慢慢通过具体的实例来介绍。本篇博客我们介绍数据结构的鼻祖——数组,可以说数组几乎能表示一切的数据结构,在每一门编程语言中,数组都是重要的数据结构,当然每种语言对数组的实现和处理也不相同,但是本质是都是用来存放数据的的结构,这里我们以J 阅读全文
posted @ 2018-04-10 14:02 kdy 阅读(175) 评论(0) 推荐(0)
摘要: 本系列博客我们将学习数据结构和算法,为什么要学习数据结构和算法,这里我举个简单的例子。 编程好比是一辆汽车,而数据结构和算法是汽车内部的变速箱。一个开车的人不懂变速箱的原理也是能开车的,同理一个不懂数据结构和算法的人也能编程。但是如果一个开车的人懂变速箱的原理,比如降低速度来获得更大的牵引力,或者通 阅读全文
posted @ 2018-04-10 13:59 kdy 阅读(167) 评论(0) 推荐(0)
摘要: 一般情况下,要输出Map中的key 和 value 是先得到key的集合,然后再迭代(循环)由每个key得到每个value而Entry可以一次性获得这两个值 Set set = map.keySet(); //keySet() for(Iterator iter = set.iterator... 阅读全文
posted @ 2018-04-10 11:09 kdy 阅读(776) 评论(0) 推荐(0)
摘要: 1、序列化是干什么的? 简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存object states,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。 2、什么情况下需要序列化 阅读全文
posted @ 2018-04-10 10:53 kdy 阅读(184) 评论(0) 推荐(0)
摘要: 关于Java序列化的文章早已是汗牛充栋了,本文是对我个人过往学习,理解及应用Java序列化的一个总结。此文内容涉及Java序列化的基本原理,以及多种方法对序列化形式进行定制。在撰写本文时,既参考了Thinking in Java, Effective Java,JavaWorld,developer 阅读全文
posted @ 2018-04-10 10:49 kdy 阅读(179) 评论(0) 推荐(0)
摘要: 一、HashMap简介 HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长。 HashMap是非线程安全的,只是用于单线程环境下,多线程环境下可以采用concurrent并发包下的concurrentHash 阅读全文
posted @ 2018-04-10 09:58 kdy 阅读(160) 评论(0) 推荐(0)