- 博客(23)
- 收藏
- 关注
原创 探究 — 二叉搜索树
二叉搜索树(Binary Search Tree)回顾与思考我们来思考这么一个问题,如何在n 个动态的整数中搜索某个整数?(查看其是否存在)看着还是很简单的,以动态数组存放元素,从第0个位置开始遍历搜索,运气好的话,第一个就找到了,运气差的话,可能找到最后都找不到,算一下的话平均时间复杂度是 O(n),数据规模大的话,是比较慢的再好一点的话,上一篇 二分查找及其变种算法 说到了,使用二分查找的话,效率是很高的,最坏时间复杂度:O(logn),不怕你数据规模大,但是我们要注意一点,这是一个动态的序列,
2020-09-19 02:39:48 495 1
原创 深入理解二叉树(超详细)
二叉树(Binary Tree)回顾在前面的文章 — 二叉树前奏中,我们对于二叉树的一些基本概念进行了回顾,同时对比了线性结构与树形结构,总结了一些常见的二叉树的性质,像二叉树,真二叉树,完全二叉树,以及满二叉树等等,但是,我们仅仅是在概念上对于二叉树有所了解,并没有进行编码工作,今天来完善一下这一步的操作直接进入二叉树的设计与编码,如果你对于二叉树的概念以及性质不了解的话,可以回去翻翻 二叉树前奏,熟悉一下,因为编码实际上就是对于二叉树性质的一个体现设计属性与节点首先,我们的二叉树是用来存放元
2020-09-17 23:53:28 20990 11
转载 区分Java中的Iterable与Iterator接口
Java中的Iterable与Iterator详解在Java中,我们可以对List集合进行如下几种方式的遍历:List<Integer> list = new ArrayList<>();list.add(5);list.add(23);list.add(42);for (int i = 0; i < list.size(); i++) { System.out.print(list.get(i) + ",");}Iterator it = list.
2020-09-15 10:43:27 396
原创 二分查找及其变种算法
二分查找及其变种算法前言概念:二分查找(Binary Search)算法,一种针对有序数据集合的查找算法,也叫折半查找算法。思想:二分查找针对的是一个有序的数据集合( 升序或降序 ),查找思想有点类似分治思想。每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为 0步骤: 定义 low,high,mid指针,分别指向首尾中间 3 个位置,value 是我们要查找的值进行如下算法(1)当arr[mid] = value 时,找到则返回 mid下标
2020-09-15 01:39:55 474
原创 二叉树前奏
前言回顾碎语在前面的数据结构学习中,无论是以顺序结构存储的数组还是链式存储结构的链表、栈、队列等,实际上都可以归类成线性结构,今天回忆另外一种数据结构,树形结构,没错,就是生活中的那种树,要倒过来的那种。以树干的分支数量为准,可以将树分为二叉树与多叉树,二叉树是我们要研究的重点生活中的树形结构也有很多,例如公司的股权图,文件目录等等,使用树形结构可以大大提高效率,同时树形结构也是被广泛应用于底层结构,例如数据库索引树形结构树的概念**节点:**根节点、父节点、子节点、兄弟节点空树:一棵
2020-09-14 16:47:57 390
原创 (超详细)动手编写 — 栈、队列 ( Java实现 )
前言栈概念什么是栈?**栈 **:是一种特殊的线性表,只能在一端进行操作入栈:往栈中添加元素的操作,一般叫做push出栈:从栈中移除元素的操作,一般叫做pop,出栈(弹出栈顶元素)注意:这里说的"栈"与内存中的"栈空间"是两个不同的概念栈的结构相比于数组和链表而言,栈同样是存储相同类型数据的线性数据结构,只不过栈的受限性比较大,比如说:栈只有一端是开放的(栈顶),所有的数据操作都是在这一端进行的,基于这个特性,有了所谓的**“后进先出(Last In First Out, LIFO)”**
2020-09-13 21:13:40 269
转载 Java集合框架总结
Java集合框架总结简介集合框架:用于存储数据的容器。集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法。接口:表示集合的抽象数据类型。接口允许我们操作集合时不必关注具体实现,从而达到“多态”。在面向对象编程语言中,接口通常用来形成规范。实现:集合接口的具体实现,是重用性很高的数据结构。算法:在一个实现了某个集合框架中的接口的对象身上完成某种有用的计算的方法,例如查找、排序等。这些算法通常是多态的,因为相同的方法可
2020-09-11 10:18:05 200
原创 一步步揭晓Java高级语法—泛型
深入理解Java高级语法——泛型前言泛型是Java基础知识的重点,虽然我们在初学Java的时候,都学过泛型,觉得自己掌握对于Java泛型的使用(全是错觉),往后的日子,当我们深入去阅读一些框架源码,你就发现了,自己会的只是简单的使用,却看不懂别人的泛型代码是怎么写的,还可以这样,没错,别人写出来的代码那叫艺术,而我…探讨Java语言为什么存在着泛型,而像一些动态语言Python,JavaScipt却没有泛型的概念?原因是,像Java,C#这样的静态编译型的语言,它们在传递参数的时候,参数的类型,必
2020-09-10 03:11:05 272
转载 Java泛型解惑之上下通配符
? extends T>和<? super T>是Java泛型中的“通配符(Wildcards)”和“边界(Bounds)”的概念。<? extends T>:是指 “上界通配符(Upper Bounds Wildcards)”<? super T>:是指 “下界通配符(Lower Bounds Wildcards)”一、为什么要用通配符和边界?–泛型不是协变的 开发人员在使用泛型的时候,很容易根据自己的直觉而犯一些错误。比如一个方法如果
2020-09-10 03:02:43 674
原创 自定义链表(Java实现)
Java实现自定义链表前言在前面的实现的动手写个Java动态数组里,虽然对于用户而言,看是实现了动态扩容的功能,实际上,只是依托底层写的方法ensureCapacity在数组容量不足的时候,对重新申请一个原数组1.5倍容量的新数组,再将原有数组中存放的元素复制到新数组来,数组指针指向新数组,从根本上来说,这并不是真正的动态。同时,数组的拷贝,以及数组申请的空间并未全部存储元素,会降低效率,也会造成内存空间的浪费,但这对于链表来说,并不是个问题,链表是做到了用多少内存就申请多少内存空间,这才是真正的动态
2020-09-09 02:30:50 1456
原创 从一知半解到步步揭晓Java语法—泛型
深入理解 Java 数组引言概念数组是数据呈线性排列的一种数据结构,它用一组连续的内存空间,来存储一组相同数据类型的数据,表示一组相同类型的数据的集合,具有固定的长度,并且在内存中占据连续的空间。数组是基本上所有语言都会有的一种数据类型,是我们在开发过程中经常会接触到的,所以我们很有必要了解数组的相关特性数组的定义和使用需要通过方括号 []。Java 中,数组是一种引用类型。Java 中,数组是用来存储固定大小的同类型元素。区别于C/C++数组存储结构区别:C数组:数组空间是一次性给
2020-09-07 23:21:02 288
转载 图解Java中的参数传递
图解Java中的参数传递今天做项目,发现了一个问题,当String作为参数传递的时候,在函数内部改变值对外部的变量值无影响,如下代码: public static void main(String[] args) { String str = "11111"; changeStr(str); System.out.println(str);//输出11111 } public static void changeStr(String str
2020-09-06 15:40:45 274
原创 图解选择排序及优化算法(Java实现)
选择排序前言**原理:**每次循环对比找出最小/大值,将最值的元素交换至左侧**思想:**直接选择排序(Straight Select Sort)算法思想:第一趟从n个元素的数据序列中选出关键字最小/大的元素并放在最前/后位置,下一趟从n-1个元素中选出最小/大的元素并放在最前/后位置。以此类推,经过n-1趟完成排序案例分析:1、初始的无序数列 {5,8,6,3,1,7},希望对其升序排序2、按照思路分析:内层循环经过一轮对比后找到最小值,min = 1,下标为index = 4;交换位置
2020-09-05 19:41:37 414 2
原创 图解冒泡排序及优化算法(Java实现)
冒牌排序基本思想定义:冒泡排序的英文是bubblesort,它是一种基础的交换排序原理:每次比较两个相邻的元素,将较大的元素交换至右端 (升序排序)思路:相邻的元素两两比较,当一个元素大于右侧相邻元素时,交换它们的位置;当一个元素小于或等于右侧相邻元素时,位置不变案例分析:1、初始的无序数列 {5,8,6,3,9,2,1,7},希望对其升序排序2、按照思路分析:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传在经过第一轮交换后,最大的数 9 冒泡到了最右边到此为止,所
2020-09-05 02:08:16 467
原创 Java实现自定义动态数组
Java实现自定义动态数组数组基础回顾1、数组是一种常见的数据结构,用来存储同一类型值的集合2、数组就是存储数据长度固定的容器,保证多个数据的数据类型要一致3、数组是一种顺序存储的线性表,所有元素的内存地址是连续的4、例如:new 一个int基本类型的数组arrayint[] array = new int[]{11,22,33};5、数组的优势与劣势数组具有很高的随机访问能力,通过数组下标就可以读取对应的值数组在插入与删除元素时,会导致大量的元素移动数组的长度是固定的
2020-09-04 22:41:44 2312 1
转载 由浅入深彻底理解 IOC 和 DI
由浅入深彻底理解 IOC 和 DI编程的基本思维注重项目的维护和迭代。追求可维护的代码。好的代码:不啰嗦的代码。具有自描述性的代码。具有可维护性的代码。所有软件的复杂性都是为了追求可维护的代码。计算机的代码其实是现实世界的一些规律或者说一些业务的映射,也就是说需要使用代码模拟现实世界的一些业务,从而解决这些业务的问题。可以把代码视作现实世界一些业务的投影。开闭原则 OCP(Open Closed Principle)对扩展开放,对修改封闭。修
2020-09-04 17:53:59 224
原创 Git错误记录 — git@github.com: Permission denied (publickey)
一、记录 1描述信息:使用命令ssh -T git@github.com测试公钥是否添加成功时,报错;#提示信息(github)git@github.com: Permission denied (publickey)#提示信息(gitee)git@gitee.com: Permission denied (publickey)错误场景:Win10环境下,为github与gitee配置SSH,实现免密登录配置步骤如下:在git bash中输入命令— ssh-keygen -t
2020-09-04 17:07:25 1494
原创 2. Git基础
2、Git基础一、初始化Git仓库将已有的项目代码交给git管理:以Wndows OS为例,其他系统也是一样的,第一步是先进入项目代码所在目录cd code-dir #code-dir是项目代码所在的文件夹使用git init命令初始化仓库,这时候会在项目文件夹中产生一个.git的隐藏文件git init #初始化一个仓库,将项目代码交给git管理<新建的项目直接交给git管理:如果是新建项目交给git管理的话,不需要在磁盘中新建一个项目文件夹。
2020-09-04 16:54:14 129
原创 1、Git安装与配置
1、Git安装与配置一:版本控制定义:版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。为什么要用版本控制:在起初的项目开发中,我们会不断的编写代码,但是,害怕有一天系统突然挂掉了,完蛋,辛苦写的代码就这么没了,所有为了防止这一点,都会开发一点就以目录拷贝的形式保存下来,自己这么1.0、2.0、3.0…的这么去标记,开始的还好,后面的话你压根就不知道自己动了那一块的代码。一个人开发的话就这么混乱了,更不要说团队协作了。这个时候,我想就很有必要使用版本控制系统了,在
2020-09-04 16:41:59 170
原创 初识HTTP协议—基础
探索HTTP协议一:HTTP的前世今生 事实上,我们的生活已经是离不开网络了,但是网络的背后是在一系列的协议下规范的运行着,今天就说下,只要你上网,就离不开默 默为你服务的HTTP协议。但是在享受网络生活时,我们对于HTTP一无所知,HTTP是什么?HTTP 协议是怎么来的?图说HTTP历史:这里我们不对协议的历史过多的描述,如果你感兴趣的话,可以读一读《图解HTTP》以及 极客时间的专栏《透视HTTP协议》Web三项关键技术:URI:即统一资源标识符,作为互联网上资源的唯一身份;
2020-09-04 16:29:51 263
原创 01.概述篇
文章目录概述篇1. 概述1.1 计算机网络1.2 功能1.3 组成1.4 分类1.5 拓扑结构2.发展历史2.1 互联网的发展历史:2.2 中国互联网简史:3.体系结构与网络协议:3.1 网络协议3.2 层次结构:3.3 现代互联网的网络拓扑:3.4 性能指标:4. 物理层4.1 物理层的作用:4.2 传输媒介:4.3 信道5. 数据链路层5.1 概述:5.2 封装成帧:5.3 透明传输:5.4...
2020-09-04 16:20:38 126
原创 深入理解Java之装箱与拆箱
深入理解Java中的装箱与拆箱一、Java数据类型1、在说装箱与拆箱之前,先说一下Java的基本数据类型,Java从数据类型上可以划分为值类型与引用类型,值类型是四类八种,分别是:整数型:byte̵,short̵,int̵,long浮点型:float,double字符型:char布尔型:boolean数据类型内存默认值包装类byte8位0Byteshort16位0shortint32位0Integerlong64位0L或0lL
2020-09-04 16:19:21 197
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人