
Java基础
ApacheCrazyFan
巨人的肩膀
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
重新认识java (一) ---- 面向对象之多态(向上转型与向下转型)
原文地址:https://blog.youkuaiyun.com/qq_31655965/article/details/54746235什么是多态简单的理解多态多态,简而言之就是同一个行为具有多个不同表现形式或形态的能力。比如说,有一杯水,我不知道它是温的、冰的还是烫的,但是我一摸我就知道了。我摸水杯这个动作,对于不同温度的水,就会得到不同的结果。这就是多态。那么,java中是怎么体现多态呢?我们来直接看代...转载 2018-05-02 10:56:19 · 350 阅读 · 0 评论 -
Java基础 - 伸展树(SplayTree)
伸展树的基本操作有:1.查询2.添加3.删除4.树的最大节点5.树的最小节点6.节点的前驱7.节点的后继8.合并9.分离下面是我完成的部分功能代码(除节点的后继,大家可以仿照求节点的前驱的方法来求后继,很简单):package com.yc.tree;import java.util.ArrayDeque;import java.util.Arra原创 2016-12-05 20:54:39 · 2036 阅读 · 0 评论 -
Java基础 - 红黑树
package com.yc.tree;import java.util.ArrayDeque;import java.util.ArrayList;import java.util.Deque;import java.util.List;/** * @author wb * @param * * 排序二叉树虽然可以快速检索,但在最坏的情况下,如果插入的节点集本身就是有序原创 2016-11-24 16:11:08 · 660 阅读 · 0 评论 -
Java基础 - 平衡二叉查找树(AVL树)
平衡二叉查找树(height balanced binary search tree)在1962年由Adelson-Velskii和Landis提出,因此又称为AVL树。AVL树定义为:一棵空树是平衡二叉查找树;假设T不是空的树,TL和TR分别是此 二叉树的左子树和右子树,如符合下列两个条件,则称T为平衡二叉查找树:(1)TL和TR亦是平衡二叉查找树;(2) |hL - hR| <= 1,其中hL和hR分别是TL和TR的高度。原创 2016-12-01 21:58:15 · 935 阅读 · 0 评论 -
Java基础 - 跳表(SkipList)
跳表(skiplist)是一个非常优秀的数据结构,实现简单,插入、删除、查找的复杂度均为O(logN)。LevelDB的核心数据结构是用跳表实现的,redis的sorted set数据结构也是有跳表实现的。跳表同时是平衡树的一种替代的数据结构,但是和红黑树不相同的是,跳表对于树的平衡的实现是基于一种随机化的算法的,这样也就是说跳表的插入和删除的工作是比较简单的。下面来研究一下跳表的核心思想:原创 2016-12-22 01:52:24 · 1100 阅读 · 0 评论 -
Java基础 - 字典树(Trie树)
本文转载由http://blog.youkuaiyun.com/jiutianhe/article/details/8076835提供1. Trie树Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率转载 2016-12-23 11:06:01 · 3870 阅读 · 0 评论 -
Java基础 - 2-3树
定义和二叉树不一样,2-3树运行每个节点保存1个或者两个的值。对于普通的2节点(2-node),他保存1个key和左右两个自己点。对应3节点(3-node),保存两个Key,2-3查找树的定义如下:1. 要么为空,要么:2. 对于2节点,该节点保存一个key及对应value,以及两个指向左右节点的节点,左节点也是一个2-3节点,所有的值都比key有效,有节点也是一个2-3节原创 2016-12-30 15:43:49 · 1932 阅读 · 0 评论 -
Java基础 - 图论的起源于发展
一、图论的起源图论是一个古老的但又十分活跃的数学学科,也是一门很有实用价值的学科,它在自然科学、社会科学等各领域均有很多应用。近年来它受计算机科学蓬勃发展的刺激,发展极其迅速。应用范围不断拓广,已渗透到诸如语言学、逻辑学、物理学、化学、电讯工程、计算机科学以及数学的其它分支中。1736年是图论的历史元年。这一年,欧拉(L•Euler)研究了哥尼斯堡城(Königsberg)的七桥问原创 2016-12-31 23:29:19 · 3257 阅读 · 0 评论 -
Java基础 - 图论之相关定义
1图:一个图(graph)G=(V,E)由顶点(vertex)的集V和边(edeg)的集E组成。每一条边就是一副点对(v,w),其中v,w∈V。有时也把边称作弧(arc)。如果点对是有序的,那么图就是有向(directed)的。有向的图有时也叫作有向图(digraph)。顶点w和v领接(adjacent)当且仅当(v,w)∈E。在一个具有边(v,w)的无向图中,w和v邻接且v和w也邻接,有时原创 2017-01-04 23:03:37 · 915 阅读 · 0 评论 -
Java基础 - 树状数组Java版
下面的文字说明引用了 int64Ago 的一篇博文。 写下这个标题,其实心里还是没底的,与其说是写博帖,不如说是做总结。第一个接触树状数组还是两年前,用什么语言来形容当时的感觉呢?……太神奇了!真的,无法表达出那种感觉,她是那么的优雅,10行不到的代码,却把事情干的如此出色!没有了解她原理的前提下即使把代码倒背如流也理解不了!其中,我就是一直没搞懂地在使用她。时隔两年,又无意遇到了原创 2016-12-19 17:00:47 · 2547 阅读 · 0 评论 -
Java基础 - 线段树Java版的链式存储结构(Segment Tree)
区间[i,i+1]表示第i个元素。原创 2016-12-18 20:09:48 · 589 阅读 · 0 评论 -
Java基础 - 堆树(Heap)
package com.yc.tree;import java.util.ArrayDeque;import java.util.ArrayList;import java.util.Deque;import java.util.List;/** * @author wb * @param * * * 堆(Heap)的定义为:堆是一棵二叉树,而且根的关键字大于子树的关原创 2016-11-28 14:08:14 · 1099 阅读 · 0 评论 -
Java基础 - 哈夫曼编码
根据哈夫曼树可以解决报文编码问题。假设需要对一个字符串如“abcdabcaba”进行编码,将它转化为唯一的二进制码,但要求转换出来的二进制码长度最小。假设每个字符在字符串中出现的频率为W ,其编码长度为L ,编码字符有N 个,则编码后二进制码额总长度为W1L1 + W1L2 + W3L3 + …… + WNLN,这正好符合哈夫曼树的处理原则,因此可以采用哈夫曼树的原理构造二进制码,并使电文总长原创 2016-11-25 22:35:07 · 1195 阅读 · 0 评论 -
Java基础 - 替罪羊树(Scapegoat Tree)
package com.yc.tree;import java.util.ArrayDeque;import java.util.ArrayList;import java.util.Deque;import java.util.List;/** * @author wb * @param * * 替罪羊树的定义: * 1.是一种二叉排序树 * 2.根节点存储了树的节原创 2016-12-12 17:02:18 · 2503 阅读 · 1 评论 -
Java基础 - 节点自平衡树(Size Balanced Tree,简称SBT)
package com.yc.tree;import java.util.ArrayDeque;import java.util.ArrayList;import java.util.Deque;import java.util.List;public class SizeBalancedTree >{ public class Node{ //data域:存放数据项 T原创 2016-12-09 16:08:59 · 1448 阅读 · 1 评论 -
图论之图形的表示方法(一)-数组表示法/相邻矩阵法/邻接矩阵法
package com.yc.graph;/** * @author wb * @since 2017年1月9日15:37:07 * @category 图的存储结构之-数组表示法/相邻矩阵法/邻接矩阵法 * {@docRoot} * 对于一个图形G=(V,E),假设有n个顶点,n≥1,则可以将n个顶点的图形,利用一个n x n二维矩阵来表示,其中假设A(i,j)=1,则表示图形...原创 2017-01-09 19:32:14 · 2693 阅读 · 0 评论 -
Java中的嵌套类、内部类、静态内部类
本博文转载自:http://blog.youkuaiyun.com/iispring/article/details/46490319在Java中我们在一个类的内部再定义一个类,如下所示:[java] view plain copy class OuterClass { ... class NestedClass { ... } }转载 2017-11-30 15:59:19 · 473 阅读 · 0 评论 -
图论之图形的表示方法(二)- 相邻表法/邻接表法
package com.yc.graph;/** * * @author wb * {@docRoot} * 邻接表(Adjacency List)是图的一种链式存储结构。在邻接表中,对图中的每个顶点建立一个单链表,第i个单链表中的节点表示依附于顶点vi * 的边(对有向图是以顶点vi为尾的弧)。每个节点由3个域组成,其中邻接点域(adjvex)指示与顶点vi邻接的点在图中的位置原创 2017-01-16 21:02:42 · 2482 阅读 · 0 评论 -
Java集合框架-Java中的HashMap和HashTable到底哪不同?
原文地址为:http://www.codeceo.com/article/java-hashmap-hashtable-differ.htmlHashMap和HashTable有什么不同?在面试和被面试的过程中,我问过也被问过这个问题,也见过了不少回答,今天决定写一写自己心目中的理想答案。代码版本JDK每一版本都在改进。本文讨论的HashMap和HashTabl转载 2017-01-15 19:55:15 · 749 阅读 · 0 评论 -
Java 集合框架-HashSet 和 HashMap 源码剖析
原文地址为:http://www.codeceo.com/article/java-hashset-hashmap.html总体介绍之所以把HashSet和HashMap放在一起讲解,是因为二者在Java里有着相同的实现,前者仅仅是对后者做了一层包装,也就是说HashSet里面有一个HashMap(适配器模式)。因此本文将重点分析HashMap。HashMap实现了Map接转载 2017-01-15 19:53:16 · 427 阅读 · 0 评论 -
HashM-Java面试题:如何对HashMap按键值排序
译文链接:http://www.codeceo.com/article/java-hashmap-value-sort.html英文原文:How to Sort HashMap Based On Values in Java翻译作者:码农网 – 小峰Java中HashMap是一种用于存储“键”和“值”信息对的数据结构。不同于Array、ArrayList和LinkedLis转载 2017-01-15 19:49:47 · 1632 阅读 · 0 评论 -
HashMap-Java8 HashMap实现原理探究
原文地址为:http://www.codeceo.com/article/java8-hashmap-learn.html前言:Java8之后新增挺多新东西,在网上找了些相关资料,关于HashMap在自己被血虐之后痛定思痛决定整理一下相关知识方便自己看。图和有些内容参考的这个文章:http://www.importnew.com/16599.htmlHashMap的存储转载 2017-01-15 19:43:45 · 518 阅读 · 0 评论 -
HashMap-Java HashMap实例源码分析
原文地址为:http://www.codeceo.com/article/java-hashmap-code.html引言HashMap在键值对存储中被经常使用,那么它到底是如何实现键值存储的呢?一 EntryEntry是Map接口中的一个内部接口,它是实现键值对存储关键。在HashMap中,有Entry的实现类,叫做Entry。Entry类很简单,转载 2017-01-15 19:40:45 · 382 阅读 · 0 评论 -
HashMap-Java HashMap工作原理深入探讨
原文地址为:http://www.codeceo.com/article/java-hashmap-worker.html大部分Java开发者都在使用Map,特别是HashMap。HashMap是一种简单但强大的方式去存储和获取数据。但有多少开发者知道HashMap内部如何工作呢?几天前,我阅读了java.util.HashMap的大量源代码(包括Java 7 和Java 8)转载 2017-01-15 19:39:07 · 494 阅读 · 0 评论 -
Java集合框架综述
原文地址为:http://www.codeceo.com/article/java-collection-summary.html最近被陆陆续续问了几遍HashMap的实现,回答的不好,打算复习复习JDK中的集合框架,并尝试分析其源码,这么做一方面是这些类非常实用,掌握其实现能更好的优化我们的程序;另一方面是学习借鉴JDK是如何实现了这么一套优雅高效的类库,提升编程能力。转载 2017-01-15 19:36:19 · 476 阅读 · 0 评论 -
HashMap-Java集合框架之 Java HashMap 源码解析
原文地址为:http://www.codeceo.com/article/java-hashmap-java-collection.html签名(signature)public class HashMapK,V>extends AbstractMapK,V>implements MapK,V>, Cloneable, Serializable可以看到Has转载 2017-01-15 19:33:24 · 497 阅读 · 0 评论 -
HashMap-Java 数组到 HashMap 之算法解释
原文地址为:http://www.codeceo.com/article/java-array-to-hashmap.html一、数组是什么?忘了在哪本书里曾看到过类似这样的一句话“所有的数据结构都是数组的演化”,想想其实是有道理的,因为计算机的内存其实就是线性的存储空间。Java示例代码:int[] array = new int[5]忽略对象转载 2017-01-15 19:30:40 · 1157 阅读 · 0 评论 -
Java Map遍历方式方式及性能测试
原文地址为:http://www.codeceo.com/article/java-map-traversal.html1. 阐述对于Java中Map的遍历方式,很多文章都推荐使用entrySet,认为其比keySet的效率高很多。理由是:entrySet方法一次拿到所有key和value的集合;而keySet拿到的只是key的集合,针对每个key,都要去Map中额转载 2017-01-15 19:27:24 · 501 阅读 · 0 评论 -
Java基础 - 哈夫曼树及其实现
哈夫曼树又被称为最有二叉树,是一种带权路径最短的二叉树。原创 2016-11-25 21:53:06 · 756 阅读 · 0 评论 -
Java基础 - 二叉树的顺序存储
顺序存储指的是充分利用满二叉树的特性:每层的节点数分别为1,2,4,8,……,2^(i-1),一棵深度为 i 的二叉树最多只能包含2^i - 1个节点, 因此只要定义一个长度为2^i - 1的数组即可存储这棵二叉树。原创 2016-11-09 20:02:55 · 617 阅读 · 0 评论 -
Java基础 - 多叉树、森林和二叉树之间的转换
/** * @author wb * * 森林、树和二叉树之间的转换 * 有序树、森林和二叉树之间有一一映射的关系,可以相互转换。 * 多叉树向二叉树转换的方法如下: * (1)加虚线:同一个父节点的相邻兄弟节点之间加虚线。 * (2)抹实线:每个节点只保留它与最左子节点的连线,与其他子节点的连线都抹掉。 * (3)虚改实:虚线改为实线。 * 例如,如图所示就是多叉树向二叉树转换原创 2016-11-22 16:26:35 · 1752 阅读 · 0 评论 -
Java基础 - 队列的链式存储结构及实现
类似于使用链式结构保存线性表,也可以采用链式结构来保存队列的元素,采用链式存储结构的队列也被称为链队列。原创 2016-11-08 15:24:32 · 4690 阅读 · 0 评论 -
Java基础 - 栈的顺序存储结构及实现
栈是一种数据结构,他代表只能在某一端进行插入、删除操作的特殊线性表,通常就是在线性表的尾端进行插入、删除操作。原创 2016-11-07 19:29:11 · 2382 阅读 · 0 评论 -
Java基础 - 队列的顺序存储结构及实现
队列(Queue)另外一种被限制的线性表,它使用固定的一端来插入数据,另一端只用于删除元素。原创 2016-11-08 15:22:58 · 1916 阅读 · 0 评论 -
Java基础 - 循环队列及实现
为了重新利用顺序队列底层数组中删除所有元素所占用的空间,消除可能出现的“假满”现象,可以将顺序队列改进为循环队列。原创 2016-11-08 15:23:39 · 693 阅读 · 0 评论 -
Java基础 - 栈的链式存储结构及实现
程序可以采用单链表来保存栈中的所有元素,这种链式的栈也被称为链栈。原创 2016-11-08 12:44:07 · 975 阅读 · 0 评论 -
编程思想之多线程与多进程系列(1)
线程优先级现在主流操作系统(如Windows、Linux、Mac OS X)的任务调度除了具有前面提到的时间片轮转的特点外,还有优先级调度(Priority Schedule)的特点。优先级调度决定了线程按照什么顺序轮流执行,在具有优先级调度的系统中,线程拥有各自的线程优先级(Thread Priority)。具有高优先级的线程会更早地执行,而低优先级的线程通常要等没有更高优先级的可执行线转载 2016-11-08 12:46:28 · 435 阅读 · 0 评论 -
Java基础 - 线性表的分析
线性表的顺序和链式两种实现各有优势。具体对比如下表所示:顺 序 表链 表空间性能顺序表的存储空间是静态分布的,因此需要一个长度固定的数组,因此总有部分数组元素被浪费链表的存储空间是动态分布的,因此空间不会被浪费。但由于链表需要额外的空间来为每个节点保存指针,因此也要牺牲一部分空间时间 性能顺序表原创 2016-11-07 19:42:05 · 404 阅读 · 0 评论 -
Java基础 - 线性表之链式存储结构-双向链表
如果为每个节点保留两个引用prev和next,让prev指向当前节点的上一个节点,让next指向当前节点的下一个节点,此时的链表既可以向后依次访问每个节点,也可以向前依次访问链表的每个节点,这种形式的链表被称为双向链表。原创 2016-11-06 16:10:39 · 526 阅读 · 0 评论 -
Java基础 - 线性表之链式存储结构-单链表
链式存储结构的线性表(简称为链表)将采用一组地址任意的存储单元存放线性表中的数据元素。链式存储结构的线性表不会按线性的逻辑顺序来保存数据元素,它需要在每个数据元素中保存一个引用下一个数据元素的引用(或者叫做指针)。原创 2016-11-05 15:03:05 · 579 阅读 · 0 评论