自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Fighting

面对压力,挑灯夜战;面对困难,永不退缩。

  • 博客(16)
  • 收藏
  • 关注

原创 得到二叉树指定层的所有结点

题目来自于牛客网:题目描述: 对于一棵二叉树,请设计一个算法,创建含有某一深度上所有结点的链表。 给定二叉树的根结点指针TreeNode* root,以及链表上结点的深度,请返回一个链表ListNode,代表该深度上所有结点的值,请按树上从左往右的顺序链接,保证深度不超过树的高度,树上结点的值为非负整数且不超过100000。解答程序:import java.util.*;/*publi

2016-06-28 00:20:14 1738

原创 HashSet源码分析(基于1.8)

其实对于HashSet,他的源码很简单,只是里面有些问题我感觉有必要拿出来跟大家共同探讨一下。HashSet底层是HashMap实现我们知道,HashMap中key值是不能“重复”的(这个是否重复是通过hashcode和equals比较出来的,这是一个值得探讨的问题),HashSet正是借鉴了HashMap的key的这样一个特性,以此产生了这样一个不能包含重复数据的集合。源码分析由于源码不是很多,所

2016-06-24 16:40:51 2778 1

原创 HashMap源码分析(基于1.8)

HashMap1.7和1.8变动比较多。 关于HashMap 1.7的版本,倪升武的博客总结的很好。这里我主要来介绍一下1.8中的HashMap。由于HashMap源码太长,我只挑选了部分进行分析,如果有没有分析到的重点难点或者大家有疑问的地方,希望大家私信给我~。HashMap的存储思想演化在1.7中,HashMap是以“数组+链表”的基本结构来存储key和value构成的Entry单元的。其中

2016-06-23 23:09:51 3153

原创 Map接口源码分析

本来打算写HashSet的源码分析的。但是发现HashSet的实现依赖于HashMap,因此这里转向Map分支的源码分析,到最后再将Set分支的补完整。Map的结构图 - SortedMap接口是有序的键值对的集合,排序依据是比较器的比较逻辑。 - AbstractMap下有三个实现类,其中TreeMap实现了NavigableMap接口,所以TreeMap中也是有序的键值对集合。 - Has

2016-06-22 23:54:28 3985

原创 LinkedList源码分析

LinkedList类继承了AbstractSequentialList< E >抽象类并实现了List接口。在AbstractSequentialList类中,其实主要是实现一些关于索引的方法。因此LinkedList中也支持“随机访问”。但这种随机是伪随机的,稍后我们可以看到。这里我结合今天下午我参加的一场面试来简要说一下关于LinkedList和ArrayList的一些问题。ArrayLis

2016-06-22 00:04:49 2141

原创 ArrayList部分源码分析(基于1.8)

今天分析第一个集合类:ArrayList首先,说一下我读这部分源码的感受。ArrayList类底层实现实际上是数组,因此很多操作会调用很多本地(Native)方法来实现或者部分实现。用java实现的很多方法中,只是用java代码进行了一些必要的逻辑判断和变量值的改变。在AbstractList中加入的modCount变量是为了配合迭代器的使用。下面是部分源码分析:package java.u

2016-06-20 18:24:01 1939 1

原创 Collection架构源码分析(基于1.8)

Collection接口有三个子接口,我们主要来分析一下其中的两种:List和SetList:有序集合,其中元素可以重复。Set:无序集合,元素不可以重复。

2016-06-18 16:01:29 1961

原创 JAVA常用集合框架源码解析(基于1.8)开题篇

倪升武的博客中有一个小专题,读完之后,发现博主的分析基本是基于JAVA1.7的,这里我基于JAVA1.8给出一些新的解读。因为在彻底浅读完JAVA1.8集合部分之前,我无法了解JAVA1.7与1.8之间关于集合框架的改动到底会有多少,因此可能产生某些个人理解上的不当,希望大家可以予以指正。集合分类1.Collection框架首先是一个Collection框架图: 标注:从网上看过好多图片,分类是比

2016-06-18 11:04:17 2688

原创 七大排序算法性能的分析

这里我来集中分析一下七大排序算法的性能问题。如果不当之处,敬请指正。冒泡排序(Bubble) 排序算法 平均情况下 最好情况 最坏情况 稳定性 空间复杂度 冒泡 O(n2n^2) O(n) O(n2n^2) 稳定 1冒泡排序算法里面含有2层循环,显然最坏时间复杂度为O(n2n^2),这里可能很多人不懂平均情况下的复杂度是什么意思,下面引用一段话:

2016-06-17 16:05:26 9201 3

原创 带权图

看了一天的带权图,终于是理解了。不过还只是理解而已。 因为本人一直追随者倪升武的博客,但是可能由于本人算法基础较差,因此在“带权图”的算法的理解上,走了好多弯路(再次证明本人的无能啊啊啊,哈哈)。带权图在图定义的基础上,然后将每个边加上一定的权重,这就构成了带权图。其实在带权图这部分,重要的是其2个重要的问题:最小生成树问题最短路径问题下面就这2个问题分别解释一下最小生成树问题注意:下面我们

2016-06-16 19:52:52 8098 2

原创 Object类源码解析

本文的分析基于JDK 1.8 JAVA中所有的类都继承自Object类。Object类的源码解析1.void registerNatives() private static native void registerNatives(); static { registerNatives(); }该方法只是对几个本地方法进行注册(即初始化java方法映射到C的方

2016-06-14 20:01:27 3731 3

原创

前言关于算法与具体实现结构之间的关系,我感觉倪升武的博客解释的很好。 这里引用一段: 前面讨论的数据结构都有一个框架,这个框架都是由相应的算法设定的。比如说,二叉树是那样一个形状,就是因为那样的形状使他更容易搜索数据和插入新数据,树的边表示了从一个节点到另一个节点的快捷方式。而图通常有一个固定的形状,这是因为由物理或抽象的问题所决定的。———–倪升武的博客哎,最近成了倪升武的追随者了,不过这

2016-06-13 23:01:53 764

原创 数据结构中的堆

数据结构中的堆性质基本操作代码示例性能分析数据结构中的堆 堆(Heap)通常是一个可以看做一棵树的数组对象。在队列中,调度程序反复提取队列中第一个作业并运行,因为实际情况中某些事件较短的任务将等待很长时间才能结束,或者某些不算小,但具有重要性的作业同样应当具有优先权。堆即为解决此类问题设计的一种数据结构 ——-维基百科堆又被成为优先级队列,尽

2016-06-13 18:07:13 967

原创 JAVA运行时数据区域

java与C++之间有一堵由内存动态分配和垃圾回收技术所围成的“高墙”,里面的人想出去,外面的人想进来。 参考资料:《深入理解Java虚拟机:JVM高级特性与最佳实践》 周志明 著运行时数据区域根据《java虚拟机规范(java SE 7)》的规定,java虚拟机所管理的内存将会包括以下几个运行时数据区域。 1.程序计数器这是一块较小的内存空间,可以看做是当前线程所执行的字节码的行号指示

2016-06-13 00:18:24 2367 1

原创 哈希散列

哈希表 散列表(Hash table,也叫哈希表),是根据关键字(key value)而直接访问数据在内存中位置的数据结构,也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中的一个位置来访问记录,这加快了查找速度,这个映射函数称作散列函数,存放记录的数组成为散列表。 —维基百科哈希冲突解决方式开放定址法这种方法要求哈希表的每个位置有且仅有一

2016-06-12 22:50:14 1273 2

原创 2-3-4 Tree

2-3-4 Tree简介2-3-4 Tree又叫2-4 Tree,属于一种平衡查找树,其高度满足:<=$\log_2 x N$,关于性能问题,以后会专门出个小专题来讨论。另外,为了行文方便,下面统一将2-3-4 Tree成为2-4 Tree。– 以下出自[维基百科]2-节点,就是说,他包含1个元素和2个子节点3-节点,就是说,他包含2个元素和3个子节点4-节点,就是说,他包含3个元素和4个

2016-06-12 15:22:50 2102

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除