自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ArrayList的源码剖析

**1.ArrayList的构造方法一个是无参构造,另一个是有参构造(需要传入初始容量值),底层实现如下:**/** * Default initial capacity. */ private static final int DEFAULT_CAPACITY = 10; /** * Shared empty array instance u...

2019-08-22 08:12:36 246

原创 Mysql索引底层数据结构

索引是帮助MySQL高效获取数据结构的排好序的数据结构。为什么要创建索引呢?因为它有以下优点:(1)通过索引可以减少数据的扫描量(就好比将全书扫描,变成了根据目录找)(2)索引可以把对硬盘的随机IO变为顺序IO(3)索引可以在排序、分组等操作时避免创建临时表(4)大大加快数据的查询速度创建索引有什么缺点呢?**1、创建索引和维护索引要耗费时间,并且随着数据量的增加所耗费的时间也会增...

2019-08-14 15:49:35 178

原创 HashMap的底层原理剖析

首先我们来看一下hashmap的源码:public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable {由源码可知:1.HashMap继承于AbstractMap类2.它实现了 两个接口,分别是:(1)Clonea...

2019-08-13 20:12:34 195

原创 LinkedList源码剖析

public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable{

2019-08-12 20:58:39 163

原创 MySQL存储引擎——MyISAM与InnoDB

MyISAM与InnoDB对比1.存储结构MyIsam在磁盘上存储成三个文件:.frm文件存储表定义.MYD (MYData)数据文件的扩展名.MYI (MYIndex)索引文件的扩展名InnoDB所有的表都保存在同一个数据文件中(也可能是多个文件,或者是独立的表空间文件),InnoDB表的大小只受限于操作系统文件的大小,一般为2GB。2.存储空间MyIsam存储空间较小,因为它可...

2019-08-11 16:53:09 241

原创 浅析ArrayList、LinkedList;HashMap与HashTable的区别

首先我们需要对集合框架有一定的了解,此处我画了一个集合框架图,如下图:ArrayList

2019-08-02 19:53:26 339

原创 数据结构算法——泛型

泛型泛型:和类型不相关 只关注算法的实现 一套算法可以处理任意的类型Object 实现一个通用的顺序结构:两点不好:1.方法的返回值必须做类型的强转2.类型强转时,没有类型的检查机制泛型的优点:1.类型检查2.不用类型的强转1.泛型编程的类型擦除机制是什么?编译器编译代码的过程中,用用户指定的具体类型,检查方法中所有的泛型参数,看类型是否匹配,如果不匹配,编译报错;如果匹配,最...

2019-07-23 21:30:23 229

原创 【剑指Offer】——斐波那契数列

package test;public class FibonacciDemo { public static void main(String[] args) { fibonacci(5); System.out.println(fibonacci(5)); } public static Integer fibonacci(...

2019-07-23 15:36:51 147

原创 简述集合中List接口及其特点

存储对象可以考虑:1.数组 2.集合数组存储对象的缺点:1.一旦创建,其长度不可变2.数组中实际存放的对象个数是不可知的数组和集合的区别:1.数组的长度是固定的 集合的长度可自行调整2.数组中的类型是固定的,集合的类型List接口:List特有的方法:1.public void add(int index,E element):将指定到的元素,添加到该集合中的指定位置上2....

2019-07-22 21:45:47 1517

原创 打印一个数组的所有子集

题目:给定一个数组arr[]={1,2,3} 打印此数组的所有子集我绘制了一颗子集树,方便于找出所有子集及对程序进行理解,将子集树中节点的左子树设为0,表示可以打印。右子树设为1,表示不打印。package childtree;/** *打印1,2,3的所有子集 */public class ChildTree01 { static int[] brr = new int...

2019-07-20 14:42:31 4097 1

原创 动态规划算法——01背包问题

动态规划算法:(规模和规模之间有重合)能用动态算法解决的问题,都有两个基本的要素:1.最优子结构2.子问题划分有重叠解决动态规划算法,主要找出两样东西:1.“状态”2.状态转移方程动态规划算法的应用场景:背包问题背包问题:有一组物品,其重量分别是:w1,w2,ww3,…wn 其价值分别是:v1,v2,v3,…vn现在有一个容量为C的背包,问怎么样装入物品,(装入的物品不可重复)才...

2019-07-20 10:59:42 280

原创 【剑指Offer】——二叉树的下一个节点

8.二叉树的下一个节点题目:给一颗二叉树和其中一个节点,找出中序遍历的下一个节点代码实现:package tree;import java.util.Scanner;/** * 二叉树的下一个节点 */public class TreeNext<T> { public static void main(String[] args) { /*...

2019-07-19 19:01:04 161

原创 数据结构算法——饿汉单例模式与懒汉单例模式

1.单例模式:1.私有化构造函数(不能再让用户通过new sinlenton(操作随意产生对象))2.需要给类提供一个唯一的单例对象3.提供一个公共的接口返回唯一的单例对象**2.单例模式的特点:1.该类只能有一个实例  2.该类只能自己创建这个唯一实例,且别人对该类无法创建实例  3.该类提供一个公开的方法public,让所有类都能够访问该方法并能获得该类自己所创建的实例。3....

2019-07-19 13:35:32 271

原创 数据结构算法——Static关键字的使用

类的初始化顺序:静态变量 静态块 成员变量 实例块 构造方法static 修饰属性(类变量):1.由类创对象建的所有对象,都共有这个属性2.当其中一个对象对此属性进行修改,会导致其他对象对此属性的调用3.类变量随着类的加载而加载,而且独一份4.类变量的加载是早于对象5.静态的变量可以直接通过“类.类变量”的形式来调用(例如:person.nation),但是“类.实例变量是不可以的”...

2019-07-19 10:20:53 311

原创 迷宫——搜索迷宫最短路径

目录:1.定义常量2.定义节点信息3.定义链式队列4.定义迷宫类5.测试代码1.定义常量public interface Constant { int RIGHT = 0; //右方向 int DOWN = 1; //下方向 int LEFT = 2; //左方向 int UP = 3;}2.定义节点类型/** ...

2019-07-18 16:53:01 261

原创 数据结构算法——递归

1.递归的思想递归的核心思想:自己调自己,将大的问题逐渐小化,使其更加简单化(每次的对象都不一样)例如下列场景会用到递归:1.求99的阶乘思路:我们知道 1!= 1;可以利用1!逐渐求解99的阶乘故当需要求解99的阶乘时,首先是 99!=99*98!参照上图的最后一行,进行求解。阶乘的代码实现如下:package recursion;public class Recursio...

2019-07-18 10:13:06 764

原创 数据结构与算法——单链表

文章目录1.单链表的性质及其优、缺点2.不带头节点的链表的插入删除操作3.带头节点的单链表4.不带头节点的链表的基础操作:(1)插入(头插法与尾插法)(2)删除(3)链表的逆置(4)获取链表倒数第K个节点的值(5)判断链表是否有环(6)合并两个有序链表1.单链表的性质及其优、缺点性质:1.链表是以节点的方式来存储的2.每个节点包含data域和next域3.链表的各个节...

2019-07-17 16:16:26 395

原创 【Java】* 给定一个整数数组 nums 和一个目标值 target, * 请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

leetcode 刷题——数组**题目:**给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。示例: 给定 nums = [2, 7, 11, 15], target = 9;因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]思路解析:1.首先遍历数组,算出target与当前元素n...

2019-07-16 11:54:00 8104

原创 高级数据结构——红黑树的左右旋转、插入删除

1.红黑树的定义:1.每个节点都是由颜色的,不是红色就是黑色2.root必须是黑色3.所有叶子节点都是黑色,叶子节点都是null,不存储实际的数据4.每个红色节点都包含两个黑色子节点,或者说每个叶子节点到根节点的所有路径中,不允许出现两个连续的红色节点5.从任一节点到其叶子节点的简单路径都包含相同数目的黑色节点2.红黑树的左旋:左旋原理图解如下:我们对下图红黑树中的节点40进行左...

2019-07-15 13:05:03 327

原创 归并排序(Merge Sort)

package sort;public class MergeSort { public static void main(String[] args) { int[] arr = new int[5]; for (int i = 0; i < arr.length; i++) { arr[i] = (int) (Math....

2019-07-13 17:30:01 145

原创 计算一个字符串中每个字符出现次数。

思路解析:获取一个字符串对象创建一个Map集合,键代表字符,值代表次数。遍历字符串得到每个字符。判断Map中是否有该键。如果没有,第一次出现,存储次数为1;如果有,则说明已经出现过,获取到对应的值进行++,再次存储。打印最终结果代码实现如下:public class MapTest {public static void main(String[] args) { ...

2019-07-13 14:39:52 237

原创 数据结构算法——快速排序(QuickSort)

快速排序是对冒泡排序的一种改进,具体实现代码如下:/* 快排 */public class QuickSort { public static void main(String[] args) { int[] arr = new int[]{-9,78,0,23,-567,70}; quickSort(arr,0,arr.length-1); ...

2019-07-11 23:42:55 337

原创 数据结构算法——二分查找(BinarySearch)

1.二分查找的思路解析二分查找(Bineary Search):1.首先确定该数组的中间下标mid = (left+right)/2;2.将要查找的数(findVal)与arr[mid]比较,假设此处数组为从小到大排序,会出现以下情况:(1) findVal > arr[mid] ,待查找数在arr[mid]的右边,向右递归查找(2) findVal < arr[m...

2019-07-09 22:44:48 383

原创 数据结构算法——插入排序(Insert Sorting)

插入排序

2019-07-09 12:34:36 514

原创 选择排序算法的速度测试

int[] arr = new int[100000]; for (int i=0;i<100000;i++){ arr[i] = (int)(Math.random()*100000);//生成一个有十万个数的数组 } System.out.println("排序前:"); //System.out....

2019-07-08 23:41:41 266

原创 数据结构算法——选择排序

选择排序(select sorting)的思路解析:第一次:从arr[0]~arr[n-1]中选取最小值,与arr[0]交换第二次:从arr[1]~arr[n-1]中选取最小值,与arr[1]交换第三次:从arr[2]~arr[n-1]中选取最小值,与arr[2]交换第四次:从arr[3]~arr[n-1]中选取最小值,与arr[3]交换…第n-1次:从arr[n-2]~arr[n...

2019-07-08 23:10:14 225

原创 BST树的镜像翻转

BST树的镜像翻转问题所谓镜像翻转,即可以理解为以根节点为中心,将左右字数的值进行对调,具体原理图如下:具体实现的代码如下:/** * BST树的镜像翻转问题 */ public void mirror(){ mirror(root); } private void mirror(BSTNode<T> root){ ...

2019-07-08 14:44:02 395

原创 AVL树的插入、删除操作的实现

1.AVL树中插入操作的实现/** * AVL树的插入操作的递归实现 * */ public void insert(T data){ this.root = insert(this.root, data); } /** * 以root为根节点,找到合适...

2019-07-07 22:34:08 369

原创 AVL树的概念及其四种旋转操作的实现

平衡二叉树(AVL树)的四种旋转操作的实现:关于为什么要使用平衡二叉树,我们首先举个例子来说明BST树存在的问题:如上图,给你一个数列[10,20,30,40],创建一颗二叉排序树(BST),我们就上图来分析BST树存在的问题:1.左子树全部为空,从形式上来看,像是一个单链表2.插入速度没有影响3.查询速度降低(因为类似于这样的BST树,在查询时,不仅要依次比较,不能发挥BST树的优势...

2019-07-07 18:06:56 239

原创 Java-集合-List接口特有方法的代码实现

集合的概念及Collection接口框架图存储对象可以考虑:1.数组 2.集合数组存储对象的缺点:1.一旦创建,其长度不可变2.数组中实际存放的对象个数是不可知的集合:存储对象的称之为集合数组和集合的区别:1.数组的长度是固定的 集合的长度可自行调整2.数组中的类型是固定的,集合的类型List接口:List特有的方法:1.public void add(int inde...

2019-07-02 15:44:29 233

原创 BST树的查询、前、中、后序遍历的实现

一、BST树的查询操作的实现/* BST树中查询操作的实现 */ public BSTNode<T> query(T data){ BSTNode<T> cur = root; while (cur != null){ if (cur != null){ if...

2019-07-02 13:27:34 705

原创 Java-高级数据结构-BST树的概念、以及它的插入、删除操作的实现

**一、什么是BST树?**BST:每个节点最多有两个孩子:右孩子》父节点的值》左孩子 即为 BST树 Binary search Tree 二叉搜索树示意图如下:如图所示:58为根节点(root),23是它的左孩子,82是它的右孩子,左孩子比58小,右孩子比58大,其他节点同理,23的左孩子为12,右孩子为35。标题二、BST树节点的实现/** * BST树的节点类型 */...

2019-07-01 00:15:47 503

原创 基础排序算法——冒泡排序算法

冒泡排序算法关于在java中如何使用冒泡排序对数组进行排序冒泡排序的基本思想如下:首先假如有一组数[12,5,7,89,54,32,13],我们首先比较数组中的第1个数与第2个数进行比较,将小数放在前面,大的数放在后面,然后继续比较第2个数与第3个数的大小,依旧是小数在前,大数在后,依次类推,直至最后两数比较结束后,第一趟比较结束,此时数组中的最大值位于数组最后。接着与第一趟原理相同,开始第...

2019-06-18 15:58:17 1067

空空如也

空空如也

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

TA关注的人

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