自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

原创 熟烂于肚的归并排序

目录归并排序原理-总览原理-合并两个有序数组递归实现性能分析非递归实现归并排序原理-总览归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide andConquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并原理-合并两个有序数组实际就是在arr这一个数组中进行操作,只是每...

2020-06-10 20:19:22 146

原创 indispensable 的HashMap

HashMap概述HashMap的底层是哈希表这种数据结构,提供映射操作,并允许使用null作为key,null作为value,但是它不保证键值对放入的顺序HashMap的内部存储结构在Java中数据存储方式最底层的两种结构,一种是数组,另一种是链表;数组的特点:空间连续,逻辑连续,寻址迅速,但是在增加或者删除元素时需要较大幅度的移动,而查询速度快,增删较慢,而链表恰恰相反链表的特点:空间不连续,逻辑连续,寻址不容易,所以查询速度慢,增删快那么有没有一种数据结构结合了数组和链表的优点

2020-05-14 21:21:43 188

原创 深入理解String类

形如 "abc" 的字面值都是 String 类的实例;我们可以对字符串进行比较、查找、截取、大小写转换等操作;public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used for charact...

2020-04-23 17:04:10 192

原创 海量数据TopK问题

TopK问题:在大量的数据中找出前k个最大值或者最小值对于海量数据,如果我们只需要找出其中最大的k个或者最小的k个,怎样才能找出呢?假设我们对所有的数据进行排序,时间复杂度(快速排序):O(nlog2n); 如果这是数亿个数据,那这样的方法也就不那么高效了哪哈有没有更加高效的方法呢?利用堆来解决TopK问题(以最大的k个举例)我们知道大根堆的堆顶是堆中的最大元素;...

2020-04-20 16:23:45 397

原创 逻辑清晰、简单明了的堆排

堆的概念 堆逻辑上是一颗完全二叉树 堆物理存储是存储在数组中 满足任意节点的值都大于其子树中节点的值,叫做大堆,或者大根堆 满足任意节点的值都小于其子树中节点的值,叫做小堆,或者小根堆 堆的作用:快速找出集合中的最值 下标关系已知双亲(parent)的下标,则:左孩子(left)下标= 2 * parent + 1;右孩子(r...

2020-04-07 16:49:51 201

原创 二叉树的前中后序遍历——非递归及层序遍历

二叉树的前中后序遍历都是深度优先,而对于深度优先的遍历方式,就会和栈扯上关系;非递归实现

2020-04-06 18:17:21 129

原创 熟烂于肚的快速排序

快速排序原理从待排序区间选择一个数,作为基准值(pivot); Partition: 遍历整个待排序区间,将比基准值小的(可以包含相等的)放到基准值的左边,将比基准值大的 (可以包含相等的)放到基准值的右边; 采用分治思想,对左右两个小区间按照同样的方式处理,直到小区间的长度 == 1,代表已经有序,或者小区 间的长度 == 0,代表没有数据;快速排序是一种划分交换的方法,它采用分治...

2020-03-31 20:46:32 119

原创 了解Java之多线程

1.进程的概念进程:os中一个程序的执行周期。确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能;程序要想运行,必须占有 CPU 资源2.线程的概念线程:线程是进程中的一个执行单元(执行路径),负责当前进程中程序的执行, 一个进程中至少有一个线程。一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序简而言之:一个程序运行...

2020-03-29 17:27:02 84

原创 二叉树的前中后序遍历——递归

什么是树首先先了解下什么是树形结构:树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:每个结点有零个或多个子结点; 没有父结点的结点称为根结点; 每一个非根结点有且只有一个父结点; 除了根结点外,每个子结点可以分为多个不相交的子树概念节点的...

2020-03-24 18:39:01 995

原创 一篇文章学会基本的二分查找

本文以问答的形式,探究二分查找的基本应用场景:寻找一个数,寻找左侧边界,寻找右侧边界。第一个场景是最简单的算法形式二分查找框架int binarySearch(int[] nums, int target) { int left = 0; int right = ...; while(...) { int mid = (right + l...

2020-03-21 14:56:53 153

原创 ArrayList的常见用法

ArrayList概述ArrayList 实现了 List 接口,底层是一个数组,元素存储是按照顺序存储的,所以常用来当作顺序表来用具体的继承实现关系请小手点这里ArrayList 变量的创建直接实例一个 ArrayList 对象 通过向上转型来创建一个 ArrayList 对象例如import java.util.ArrayList;import java.uti...

2020-03-19 22:04:03 175

原创 super关键字

子父类中构造方法的调用在创建子类对象时,父类的构造方法会先执行,因为子类中所有构造方法的第一行有默认的隐式 super();语句格式调用本类中的构造方法this(实参列表);调用父类中的空参数构造方法super();调用父类中的有参数构造方法super(实参列表);为什么子类对象创建都要访问父类中的构造方法?因为子类继承了父类除构造方法外所以有的内容,所...

2020-03-19 19:58:51 118

原创 JVM内存区域

JVM 内存分区线程私有区(生命区域与用户线程强相关)Java虚拟机栈 本地方法栈 程序计数器线程共享区域(生命周期与JVM进程强相关)堆 方法区 运行时常量池分区详述线程私有区域程序计数器程序计数器是一块很小的内存空间,可看作是当前进程所执行的字节码行号指示器,存放指令,记录当前进程走到哪 程序计数器是 JVM 运行时区域唯一一块不会放出...

2020-03-05 14:53:29 89

原创 浅谈final和static关键字

目录final 关键字1.1 final 修饰类1.2 final 修饰方法1.3 final 修饰局部变量1.4 final 修饰类的成员变量static 关键字 2.1 static 修饰的对象特有数据2.2 static 注意事项_静态不能直接调用非静态2.3 static 静态的使用场景2.4 对象中的静态调用2.5 定义静...

2020-03-03 20:49:00 178

原创 数据结构——队列

目录什么是队列?如何实现队列?什么是队列?先进先出,后进后出,这就是典型的“队列”结构支持两个操作:入队 offer(),放一个数据到队尾;出队 poll(),队首元素出队所以和栈一样,队列也是一种操作受限的线性表如何实现队列?public interface Queue<T> { public void offer(T item...

2020-03-01 19:41:58 169

原创 数据结构——栈

1.什么是栈先进后出,后进先出,这就是典型的栈结构 从栈的操作特性来看,是一种 操作受限 的线性表,只允许在端插入和删除数据2.为什么需要栈栈是一种操作受限的数据结构,其操作特性用数组和链表均可实现 但任何数据结构都是对特定应用场景的抽象,数组和链表虽然使用起来更加灵活,但却暴露了几乎所有的操作,难免会引发错误操作的风险 所以,当某个数据集合只涉及在某端插入和删除数据,...

2020-02-19 21:36:57 130

原创 Java集合框架

集合集合,集合是Java中提供的一种容器,可以用来存储多个数据。在前面的学习中,我们知道数据多了,可以使用数组存放或者使用ArrayList集合进行存放数据。那么,集合和数组既然都是容器,它们有什么区别呢?数组的长度是固定的,而集合的长度是可变的 集合中存储的必须是引用类型数据集合关系继承图ArrayList的继承关系查看 ArrayList 类发现它继承...

2020-02-17 20:29:05 1474 1

原创 浅谈异常

1.异常的概述什么是异常是一个在程序执行期间发生的事件,它中断正在执行程序的正常指令流。为了能够及时有效地处理程序中的运行错误,必须使用异常类异常类在Java中将异常的信息封装成一个类 当程序出现异常时,就会创建异常类对象并抛出异常相关的信息(如异常出现的位置,原因)常见的异常数组越界异常:ArrayIndexOutOfBoundsException 空指针异常:...

2020-02-09 20:29:16 110

原创 Java中泛型和包装类

目录1. 泛型1.1 泛型类的引用1.2 泛型的定义1.3 泛型背后作用时期和背后的简单原理1.4 泛型类的使用1.5 泛型的陷阱1.6 泛型的意义2. 包装类2.1 基本数据类型和包装类直接的对应关系2.2 包装类的使用,装箱(boxing)和拆箱(unboxing)1. 泛型1.1 泛型类的引用问题:简单的顺序便只能够存放 int 数据,如果...

2020-02-04 21:21:17 285 1

原创 抽象类和接口

目录抽象类抽象方法抽象类的作用接口语法规则接口间的继承总结抽象类类与类之间的关系是继承,一个类可以继承另一个类,而有一种类存在的意义就是为了继承 抽象类包含抽象方法(abstract method)的类就是抽象类(abstract class)抽象方法被 abstract 修饰的方法称为抽象方法,抽象方法没有方法体( 没有 {} ,不能执行代码)...

2020-01-16 20:21:18 131

原创 继承和多态

目录继承语法规则protected 关键字final 关键字多态向上转型动态绑定方法重写向下转型super关键字继承代码中创建的类, 主要是为了抽象现实中的一些事物(包含属性和方法). 有的时候客观事物之间就存在一些关联关系, 那么在表示成类和对象的时候也会存在一定的关联.public class Animal { pu...

2020-01-15 14:08:19 329 1

原创 Java类和对象

类和对象1.Java作一种(OOP)面向对象编程语言,在进行开发时找对象,建对象,用对象是一种重要的开发思想,在提到对象时就要先理解什么是类2.类就是一类对象的统称,对象就是这一类具体化的实例,我们可以使用类来创建(new)一个或者多个对象,总的来说:类相当于一个模板,对象是由模板产生的样本,一个类可以产生无数个对象那么如何定义一个类//创建一个类class <class_name...

2019-11-25 21:52:34 188

原创 Arrays操作数组的工具类

Arrays是Java中操作数组的工具类在使用时需要导入import java.util.Arrays1.1数组转字符串Arrays.toString(数组)数组可以是int[] arr;double[] arr;float[] arr;char[] arr;byte[] arr;boolean[] arr;long[] arr;short[] arr;这八种基本数据类型。将数组的内容转化...

2019-10-24 20:59:41 192

原创 Java数组总结

/** 这篇文章时我在学习Java数组时的学习总结,包括Java数组的基本使用和特殊的点 如有错误,敬请原谅,还望能够指出!*/Java中一维数组的定义和使用Java中数组和C语言中的数组有异曲同工之处:为了方便,数组就是相同类型数据的集合1.1数组的定义有三种定义一维数组的方法,分别为:动态初始化,静态初始化,定义初始化在学习的过程中,较为常用的是静态初始化array是数组名...

2019-10-20 21:11:05 252

原创 Java运算符总结

算术运算符:+ - * / %1.在算术运算符中值得注意的是:int/int得到的也是int例:int a = 1;int b = 2;System.out.println(a/b);//结果为0要想得到小数,则两者之中至少有一个是float或者double类型2. 0不能作为除数例:int a = 1;int b = 0;System.out.println(a/...

2019-10-13 16:25:55 163

原创 Java数据的基本类型(内置类型)

(为了方便记忆,会与C语言中的基本类型对比记忆)Java中有八种基本数据类型(内置类型)分别是int,long,double,float,byte,short,char,boolean接下里对每一种类型进行说明:1.int整形在Java中int占4个字节,可存放的数据范围是 - 2^31 ~ 2^31 - 1在C语言中也是如此说明:对于Java来说,它的一个特点就是可以跨平台运行。因此...

2019-09-28 17:28:07 245

原创 C语言操作符笔记

算术操作符+ - * / %注意:1.对于 / 操作符说如果两个操作数都是整数得到的仍然是整数(得到的是 “商” ),要想得到浮点数,则两个操作数中必须 有一个是浮点数。 2.对于 % 操作符来说两个操作数必须都是整数(得到的是 “余” 数)。移位操作符>> 右移操作符<&...

2019-08-20 16:06:41 91

原创 交换整形变量内容的几种方法

介绍几种交换整形内容的方法,先看这个代码1.创建临时变量交换整形内容。通过创建临时变量的方法来交换两个整形内容,特别注意:在函数内部想要改变函数外部变量的内容时参数需要传地址,称为传址调用;void Change(int* pa, int* pb){ int tmp = *pa; *pa = *pb; *pb = tmp;}int main(){ int a = 10; in...

2019-08-17 21:15:02 140

原创 自我介绍及编程规划

我是一名即将大二的西安邮电大学的一名工科男,在幼稚的少儿年代酷爱打游戏对电脑也是充满的无比浓厚的兴趣,但是因为条件也没有能够即使培养兴趣。不过现在也终于是有机会能够干自己喜欢的东西了,与计算机一决高下。之前也没有接触过编程,但是现在我接触到了,未来也为与编程相处。在大二这这一年我要不断努力熟练的掌握一门语言并且要学习多的数据结构,算法,操作系统和计算机网络。在这段艰苦而又充满挑战的时间里我要虚心...

2019-08-10 16:40:12 449

原创 逻辑或与逻辑与的陷阱

逻辑或和逻辑与稍有不慎我们就会陷入他的陷阱;接下来我们来看一下这个代码;#include<stdio.h>int main(){int i=0;int a = 1;int b = 2;int c = 3;int d = 4;i = a++ && ++b && d++;printf("a = %d\n,b = %d\n,c = %d\...

2019-05-22 12:31:56 156

原创 浅谈冒泡算法

接触的第一个排序算法冒泡排序,首先先了解一下什么叫做冒泡排序,假设较大的数比较重,较小的数轻,那么在两者进行比较的时候大的数就会走向底部,而小的数就会漂浮起来;假设一个数组arr[10]={2, 1, 3, 5, 6, 4, 7, 9, 8, 10},如果将这样的一个无序数组通过冒泡算法进行排序,那么就会引入一个名词叫做趟,如果我们按照从小到大排序,那么第一趟中十个数两两进行比较会比较9次,第二...

2019-05-11 15:36:52 129

空空如也

空空如也

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

TA关注的人

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