自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

何哥的博客

Bug工程师,面向浏览器编程

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

原创 数据结构基础16:递归

前言:遍历二叉树,是学习树这种数据结构首先要理解的一种基本操作,比较简单地方式就是用递归去遍历。鉴于递归这种调用方法有一定的特殊性,本篇博客就来介绍一下递归的定义以及几个递归的经典算法题。一说起递归,我想每个人都不陌生。举个从小就听过的例子:从前有座山,山里有座庙,庙里有个和尚,和尚在讲故事,从前有座山,山里有座庙,庙里有个和尚,和尚在讲故事,从前有座山...这其实是抽象出来的递归现象,但...

2019-01-29 00:49:37 3370

原创 数据结构基础15:二叉树的前序、中序和后序遍历

前言:到目前为止,我们已经介绍了线性数据结构和表数据机构(哈希表)。这些数据机构一般都不适合表示具有层级结构的数据。在层次化的元素之间有祖先—后代、上级—下属、整体—部分以及其他类似的关系。一、树的介绍1、树的定义:树状图是一种数据结构,它是由n(n>=0)个结点组成一个具有层次关系的有穷集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。n=0...

2019-01-28 19:56:49 4373

原创 数据结构基础14:深入解析HashMap源代码

前言:本文的 HashMap 源码是基于Jdk1.8版本的。 一、HashMap的底层实现原理Java 8.0后,HashMap的底层实现是数组+链表+红黑树。HashMap的底层实现是用哈希表,而Java中实现哈希表的数据结构是数组+链表。其中,当链表长度超过8时,会自动使用红黑树代替,红黑树的查找时间复杂度为O(logn)。1、HashMap的底层主要是基于数组和链表来...

2019-01-28 19:26:11 365

原创 数据结构基础13:HashMap使用总结

一、HashMap的定义HashMap是基于哈希表的 Map 接口的实现,它存储的内容是键值对(key-value)映射,其中元素的排列顺序是不固定的。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。另外,HashMap是非线程安全的,也就是说在多线程的环境下,可能会存在问题;而Hashtable是线程安全的,但由于同步需要花时间,所以效率没有HashMap好,...

2019-01-28 00:17:26 379

原创 数据结构基础12:HashMap和Hashtable的区别

前言:HashMap是基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。另外,HashMap是非线程安全的,也就是说在多线程的环境下,可能会存在问题,而Hashtable是线程安全的,但由于同步需要花时间,所有效率没有HashMap好。由于历史原因,HashTable基本被弃用了,日常开发中我们习惯使用HashMap。1、产生时间H...

2019-01-27 17:15:40 755

原创 Java基础20:public、private、protected和default的区别

前言:public、private、protected和default是Java类的属性和方法成员的访问控制修饰符,即对象.属性/方法访问区别:public:可以被所有其他类所访问private:只能被自己访问和修改protected:自身、子类及同一个包中类可以访问default:同一包中的类可以访问,声明时没有加修饰符,认为是friendly。public:具有...

2019-01-27 04:58:04 457

原创 数据结构基础11:哈希表应用之LZW压缩

一、LZW的介绍定义:LZW算法又叫“串表压缩算法”就是通过建立一个字符串表,用较短的代码来表示较长的字符串来实现压缩。特点:LZW和哈夫曼编码一样,是无损压缩中的一种。该算法通过建立字典(HashMap),实现字符重用与编码,适用于source中重复率很高的文本压缩。即对于数据流中连续重复出现的字节和字串,LZW压缩技术具有很高的压缩比。1、LZW编码 (Encoding) 的核心思...

2019-01-27 01:31:56 1722

原创 数据结构基础10:哈希表常见问题

一、有两个字典,分别存有 100 条数据和 10000 条数据,如果用一个不存在的 key 去查找数据,在哪个字典中速度更快?有些计算机常识的读者都会立刻回答: “一样快,底层都用了哈希表,查找的时间复杂度为 O(1)”。然而实际情况真的是这样么?答案是否定的,存在少部分情况两者速度不一致。答:在 Java 和 Objective-C 中,如果哈希函数不合理,返回值过于集中,会导致大...

2019-01-26 20:48:14 722

原创 Java基础19:Object类

前言:Java中,Object类是一个特殊的类,是所有类的父类。如果一个类没有用extends明确指出继承于某个类,那么Java会自动把Object作为要定义类的超类,可以使用类型为Object的变量指向任意类型的对象。但Object类的对象变量只能用作各种对象的通用持有者。要对他们进行任何专门的操作,都需要知道它们的原始类型并进行类型转换。例如:Object obj = new MyObje...

2019-01-26 16:38:45 1039

原创 数据结构基础9:哈希表

前言:哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景极其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表。还有就是适用于Source中文本重复率高的文本压缩LZW。一、字典字典是由一些形如(k,v)的数对所组成的集合,其中k是关键字,v是与关键字k对应的值。任意一个数对,其关键字都不等。确定字典是否为空 确定字典有多少...

2019-01-24 16:44:29 658

原创 数据结构基础8:队列

前言:队列(Queue)是一种先进先出(FIFO)的线性表。特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除。要实现队列,需要设置两个指针进行管理:一个是队头指针front,它指向队首元素;另一...

2019-01-23 19:33:38 272

原创 数据结构基础7:栈应用之老鼠迷宫

问题描述:迷宫是一个矩形区域,入口在左上角,出口在右下角。迷宫内部包含不能穿越的墙或障碍物,这些障碍物沿着行和列来放置,与迷宫边界平行。我们需要编程帮助杰瑞老鼠寻找一条从入口到出口的路径。一、问题分析1、首先要有一张迷宫地图,地图由两部分组成: (1)一是迷宫中各处的位置坐标(2)二是迷宫各位置处的状态信息,即该处是墙还是路假定用m*n的矩阵来表示迷宫,迷宫的每个位置都可以用其...

2019-01-12 00:19:23 1542

原创 数据结构基础6:栈应用之括号匹配

问题描述:对一个字符串的左右括号进行匹配。输入:一个字符串表达式输出:匹配成功true或匹配失败false例如:假设一个算术表达式中可以包含三种括号:圆括号“()”,方括号“[]”和花括号“{}”,且这三种括号可按任意的次序嵌套使用如:(a+b)[c*({d-e)]},返回false。编写判别给定表达式中所含括号是否正确配对出现的算法。匹配思想:通过观察可以发现,如果从左向右扫描一...

2019-01-09 00:50:03 753

原创 数据结构基础5:栈应用之十进制转N进制

一、进制转换基础二进制转为十进制:把二进制数的各个位拆开,分别乘以2的次幂再累加。末尾位乘2的0次幂,依次类推。 比如:1011十进制=1*2^3+1*2^2+1*2^1+1*2^0 =11.  十进制转为二进制除k取余法:主要用于把十进制的数化为k进制的数。例如:把89化为二进制的数89÷2=44 余144÷2=22 余022÷2=11 余011÷...

2019-01-08 02:58:33 2695

原创 数据结构基础4:栈

前言:栈(Stack)是一种特殊的线性表,只允许在线性表的一端操作,栈顶允许操作,栈底不允许操作。生活中的栈比如书店的一摞教科书、自助餐厅的一摞餐盘,其工作方式就是后进先出,只要规定取得时候只能从最上面取,然后新的书/盘子放在这摞东西的顶部。栈的特性:后进先出(LIFO)。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶(压栈push),需要读数据的时候从栈顶开始弹出数据(...

2019-01-08 01:49:38 402

原创 数据结构基础3:链表常见面试题

前言:单链表的反转、合并两个有序链表和倒序打印链表等算法,是各大公司Java面试开发中常考的题目。一、单链表反转算法思想:所谓的单链表反转,就是把每个节点的指针域由原来的指向下一个节点变为指向其前一个节点。由于单链表没有指向前一个节点的指针域,因此我们需要增加一个指向前一个节点的指针pre,用于存储每一个节点的前一个节点。此外,还需要定义一个保存当前节点的指针cur,以及下一个节点的t...

2019-01-06 04:37:28 696

原创 数据结构基础2:链表

前言:线性表的链式描述,是最基本的数据结构,在物理空间上不必连续存储。使用链表结构可以克服数组需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。但是同时链表由于增加了结点的指针域,空间开销比较大。因为链表失去了数组随机读取的优点,故查询速度要慢点。因为数组的插入删除需要移动大量的元素,而链表只需要改变“链”的关系即可而查询比数组慢,所以其插入、删除操作...

2019-01-06 03:14:06 552 2

原创 数据结构基础1:数组

前言:线性表的数组描述,在物理空间上连续存储,利用索引随机读取元素。线性表:也称为有序表,形如(e0,e1,e2...en-1),n为有穷自然数,可以认为e0先于e1,e1先于e2,除了这种先后关系,线性表不再有其他关系。一、合并两个有序数组题目:给定两个有序整数数组nums1和nums2,将它们合并成新的有序数组nums3算法思路:从两数组的最左边开始,按位循环比较两个数组的...

2019-01-05 01:13:08 306

原创 数据结构复习大纲

前言:1976年,一个瑞士计算机科学家写一本书《Algorithms + Data Structures = Programs》。即:算法 + 数据结构 = 程序。40多年过去了,这个等式依然成立。数据是程序的核心要素,因此数据结构的价值不言而喻。无论你在写什么程序,你都需要与数据打交道,比如员工工资、股票价格、杂货清单或者电话本。在不同场景下,数据需要以特定的方式存储,我们有不同的数据结构可...

2019-01-04 22:18:20 2183 1

空空如也

空空如也

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

TA关注的人

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