自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 实现单例模式的几种方法

单例模式(singleton):某些类在进程的运行过程,只需要一个对象,不允许创建多个对象出来如何写单例模式:1.饿汉模式——一开始就创建好对象class Singleton { private static Singleton instance = new Singleton(); private Singleton() {} public static Sing...

2020-02-29 19:05:53 178

原创 多线程(六)——解决线程不安全的方法

怎么确保线程安全问题:

2020-02-29 18:46:57 243

原创 多线程(五)—— 问题篇

多线程带来的风险——线程安全1. 线程安全的概念线程安全:进程运行的结果和预期一致就是线程安全的(多次运行的情况下)类/对象线程安全:该类或者该对象在使用时,不需要你再考虑线程安全,可以认为它是线程安全的。有共享数据才有可能出现线程安全问题线程的调度是会随时发生的,无法预测与Java的内存模型有关1.1 java内存区域划分堆、栈、方法区、PC、常量池五个部分名称属...

2020-02-20 16:08:55 137

原创 多线程(四)—— 状态篇

线程的状态1.观察线程的所有状态设置状态的目的:线程调度器管理线程时使用帮助程序员观察线程时使用线程的状态是一个枚举类型 Thread.Statepublic class ThreadState { public static void main(String[] args) { for(Thread.State state : Thread.State.v...

2020-02-20 15:44:49 120

原创 多线程(三)—— 方法篇

线程的方法1.1 启动一个线程start() 与 run()public class scence { private static long fib(int n){ if(n < 2){ return n; } else { return fib(n-1) + fib(n-2); ...

2020-02-20 14:45:03 119

原创 多线程(二)—— 认识篇

1.Thread类及常见方法Thread 类是 JVM 用来管理线程的一个类,换句话说,每个线程都有一个唯一的 Thread 对象与之关联。Thread 类的对象就是用来描述一个线程执行流的,JVM 会将这些 Thread 对象组织起来,用于线程调度,线程管理。1.1 Thread的常见构造方法方法说明Thread()创建线程对象Thread(Runnable ...

2020-02-19 00:34:25 74

原创 多线程(一)—— 概念篇

多线程(一)一、线程与进程的概念进程是资源分配的最小单位线程是程序执行的最小单位(资源调度的最小单位)1.同一个进程中可以包括多个线程,并且线程共享整个进程的资源(寄存器、堆栈、上下文),一个进程至少包括一个线程。2.线程没有自己的地址空间,线程包含在进程的地址空间中。一个线程死掉会导致整个进程死掉,而进程之间是独立的,一个进程死掉不会影响其他进程。进程中的线程共享进程的内存和资源,他们...

2020-02-19 00:13:55 73

原创 Java 之 内部类知识点

内部类java中有四种内部类,分别为实例内部类、静态内部类、匿名内部类以及本地内部类,这里只介绍前三种。1.实例内部类1.如何拿到实例内部类的对象?外部类名.内部类 in(实例内部类对象名) = 外部类对象.new 内部类名();2.在实例内部类当中,是否可以定义static的数据成员?本质上不能,但是可以定义为 static final,必须是在编译时期确定的!3.内部类可以...

2020-02-13 23:56:56 146

原创 Map和Set的使用及常见方法

Map 和 Set1.模型Map:key-value以键值对的方式存储。key值必须不同,value值可以相同。Set:数学上的集合,里面的元素不能重复。2.Map的使用2.1Map的常见方法Map的方法:V put(K key, V value) 添加,根据key值存放对应的value值。根据给定的key来生成对应的哈希函数K类型的key,V类型的value;若添加的...

2020-02-13 23:47:16 1906

原创 根据所给树构建字符串

根据所给树构建字符串采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。空节点则用一对空括号 “()” 表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。/*** Definition for a binary tree node. * public class TreeNode { * int val; * Tree...

2020-01-27 23:59:23 109

原创 归并排序

归并排序** 时间复杂度:** O(N * log2 N)算法思想: 首先把一个数组中的元素,按照某一方法,先拆分了之后,按照一定的顺序各自排列,然后再归并到一起,使得归并后依然是有一定顺序的 。代码示例:(1)递归实现归并排序/1.递归拆分,先拆分为单个的序列 public static void mergeSort(int[] array,int low,int high){...

2020-01-27 23:48:52 81

原创 快速排序

快速排序时间复杂度: O(N * log2 N)最坏情况下: O (N ^ 2)空间复杂度: O(log2 N)代码示例:(1)递归实现快速排序public static void quickSort(int[] array){ quick(array,0,array.length - 1);}public static void quick(int[] array,int...

2020-01-27 15:50:50 113

原创 冒泡排序

冒泡排序时间复杂度: O(n^2)空间复杂度: O(1)稳定性: 稳定趟数和次数的关系: * 例如:有n个数据,需要比较n-1趟, * 第一趟:比较n-1次 * 第二趟:比较n-2趟 * 比较的次数随着趟数的减少而减少优化: 设置标志判断每一趟是否发生了交换,若发生了交换,则进行下一趟;若没发生交换,说明已经有序,则不需要再进行比较代码示例: pub...

2020-01-24 12:18:56 184

原创 堆排序

堆排序时间复杂度: n*log2(n)稳定性: 不稳定实现: 将给定的数组当成一棵二叉树,从最后一个子树的开始向下调整,结束后是一个大根堆;将根节点元素与最后一个元素交换,将大的存到数组最后,交换完再向下调整,循环直到交换结束基本原理: 也是选择排序,只是不在使用遍历的方式查找无序区间的最大的数,而是通过堆来选择无序区间的最大的数。注意: 排升序要建大堆;排降序要建小堆。堆排序过...

2020-01-24 12:13:31 130

原创 选择排序

选择排序时间复杂度: O(N^2)空间复杂度: O(1)稳定性: 不稳定**思想:**从头开始拿出元素与之后的比较,满足条件则交换代码示例:public static void selectSort(int[] array){ for(int i = 0;i < array.length;i++){ for(int j = i + 1;j < ar...

2020-01-24 12:04:00 82

原创 希尔排序

希尔排序**时间复杂度:**最好 O(N)最坏 O(n ^ 2)稳定性: 比较时加了" = ",则不稳定,否则稳定实现: 组内直接插入排序,最后看成一组,进行插入排序。思想与直接插入排序类似,不过增量变成了组的差值(这是因为在进行组内排序)分组-》组内插入排序-》最后看成一组代码示例:public static void shell(int[] array,int gap){ ...

2020-01-24 11:53:32 190

原创 直接插入排序

直接插入排序时间复杂度: O(N ^ 2) (最坏情况下 - 无序)O(N) (最好情况下 - 有序)稳定性:稳定实现原理:简单的说,就是把数组划分为两个部分,一部分已经有序(在最开始的时候,就把第一个元素,看成有序的那部分),一部分未排序;每次从未排序的部分,取第一个元素,然后遍历有序部分,进行比较,找到位置以后,就将这个元素插进去。具体做法就是,找到位置以后,不断把已经有序的元素...

2020-01-24 11:40:19 111

原创 优先级队列

优先级队列1.直接new一个PriorityQueuePriorityQueue底层默认是一个小堆。代码示例:public class Test{ public static void main (String[] args) { Queue<Integer> queue = new PriorityQueue<>(); queue.o...

2020-01-24 11:23:46 119

原创 堆操作 - 建堆(向上调整)、向下调整

1.以堆的方式存储二叉树1.1 原因使用数组保存二叉树结构,方式即将二叉树用层序遍历方式放入数组中。一般只适合表示完全二叉树,因为非完全二叉树会有空间的浪费。因此我们可以采用堆来存储二叉树,以免造成空间的浪费1.2 下标关系已知双亲(parent)的下标,则:左孩子(left)下标 = 2 * parent + 1;右孩子(right)下标 = 2 * parent + 2;已知...

2019-12-17 20:23:01 1985

原创 将二叉搜索树转换为双向链表

将二叉搜索树转换为双向链表二叉搜索树的定义:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉排序树。题目描述:输入一棵二叉搜索树,将其转换为排序的双向链表,要求是不能创建任何新的节点,只能调整树中节点指针的指向。public Node prev = null; public ...

2019-12-17 18:54:43 108

原创 根据树的后序遍历和中序遍历构造二叉树

根据一棵树的后序遍历与中序遍历构造二叉树思路及实现:1.先遍历后序,从尾巴开始倒着遍历(倒数第一个元素为根节点)2.找到后序遍历的节点在中序当中的位置3.一直去遍历后序从后向前遍历后序遍历数组;拿到后序遍历的倒数第一个节点,new一个节点出来让其成为根节点;找到在中序遍历数组中该节点的位置,左边就是左子树,右边就是右子树;继续上述查找,直到后序遍历结果的数组全部遍历完。 publ...

2019-12-17 18:53:59 258

原创 二叉树的相关问题(3)— 根据树的前序遍历与中序遍历结果构造二叉树

根据一棵树的前序遍历与中序遍历构造二叉树这个问题与给一棵树的前序遍历与中序遍历的结果,根据结果去画出这个二叉树一致,只不过要使用代码实现。代码实现思路:1.先遍历前序, 拿到前序遍历的第一个节点,new一个节点出来让其成为根节点2.找到前序的节点在中序当中的位置,左边就是该节点的左子树,右边就是该节点的右子树3.一直去遍历前序,即继续上述查找,直到前序遍历的数组结束class Node...

2019-12-12 16:49:46 125

原创 二叉树的相关问题(2) — 求二叉树节点的最近公共祖先

求二叉树节点的最近公共祖先题目描述:给定两个节点p和q,求两个节点的最近公共祖先。思路:1.看p或者q是否为根节点,若有一个是;则最近的公共祖先是根节点。2.分别在根节点的左子树和右子树中找p节点和q节点:1)左右子树两边的都不为空,则说明p、q存在于根节点的左子树或者右子树;则最近公共祖先是根节点。2)左不空,右空;则说明p、q存在于根节点的左子树中,则最近公共祖先是在左树中先找到...

2019-12-12 16:36:51 246

原创 二叉树的相关问题-思路及代码实现 (1)

二叉树的相关问题因为二叉树是由许多棵子树子树组成的,因此一个大问题可以转换为许多个相同的小问题,因此这里关于二叉树的问题多采用递归实现。求二叉树的节点个数思路:拿到二叉树的根节点,若根节点为空,则节点个数为0;若根节点不是空,则二叉树的节点个数为左子树的节点个数+右子树的节点个数+1(根节点)1.使用递归实现求二叉树的节点个数 int getSize2(Node root) { ...

2019-12-11 22:22:36 122

原创 二叉树的遍历方式-递归及非递归实现

二叉树的节点表示首先,要完成二叉树的方式,要先定义二叉树的节点,节点定义如下:class Node { char value; Node left; Node right; public Node(char value) { this.value = value; }}二叉树的前序遍历二叉树的前序遍历:先遍历根节点,再遍历左子树...

2019-12-04 22:05:29 107

原创 树及二叉树的概念及知识点

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

2019-12-04 16:40:44 260

原创 最小栈的实现

最小栈的实现实现最小栈:首先需要两个栈首先:定义stack 和 minStack入栈时,数据总会入到第一个栈 stack 中放入到 minStack 栈时:若为第一次入栈,则将数据元素直接放入stackTmp栈中;若不是第一次入栈,每次与 minStack 栈顶元素比较,若比栈顶元素小,则放入。即保证 minStack 栈顶是入栈元素的最小值。出栈时:在stack不为空的条件下, ...

2019-12-01 22:06:11 94

原创 Java 之栈和队列的知识点及实现

栈和队列一、栈1.概念栈:一种特殊的线性表,只允许在固定的一端进行插入和删除数据操作。进行数据插入和删除操作的一端称为栈 顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据在栈顶。2.栈的方法:3.栈的实现(1) 使用顺序表实现栈,采用尾插...

2019-12-01 21:35:55 266

原创 使用List集合实现杨辉三角

List集合实现杨辉三角杨辉三角11 11 2 11 3 3 11 4 6 4 1List实现,每一行为一个list,把每一行又放入一个大的list中List嵌套List,List中又存放了List,里层的List为每一行的数字,外层的List存放小的List.代码实现:import java.util.*;public class TestDemo4 { publ...

2019-11-26 16:09:00 890

原创 Java 之 List集合 的使用

List 的使用ArrayList类和LinkedList实现了List接口,因此在使用List集合时可以new一个ArrayList 或者一个 LinkedList.List 的方法:boolean add(E e) // 尾插法这里默认为尾插法void add(int index,E element) //将e插入到index位置插入时,list只能按顺序插入数据,不能...

2019-11-26 15:56:18 206

原创 Java 之 泛型 与 包装类

Java 之 泛型 与 包装类泛型泛型是作用在编译期间的一种机制,即运行期间没有泛型的概念。定义泛型类时,"<>"内一般给 T 或者 E泛型代码示例:class MyArrayList{ public Object[] elem; public int useSize; public MyArrayList() { this.elem...

2019-11-12 22:11:15 183

原创 Java 之 集合框架 及 接口示例

集合框架及接口示例集合是一种数据结构。数据结构:组织数据的一种方式例如:数组就是一种数据结构,它组织数据的方式:增删改查Java集合框架集合中有许多集合类集合类又称集合框架库橙色的为interface 接口蓝色的为abstract class 抽象类棕色的为class 普通类接口与接口之间为继承关系类要实现接口类与类之间为继承关系Collection...

2019-11-12 22:00:29 164

原创 Java 之 异常

异常异常指程序在运行时出现错误时通知调用者的一种机制。1.异常的体系顶层类 Throwable 派生出两个重要的子类, Error 和 ExceptionError类和Exception类又派生出许多子类Error 指的是 Java 运行时内部错误和资源耗尽错误. 应用程序不抛出此类异常. 这种内部错误一旦出现, 除了告知用户并使程序终止之外, 再无能无力. 这种情况很少出现.Ex...

2019-11-10 10:52:11 61

原创 Java 之 String 类知识点

认识String类1.字符串的创建String str = "Hello";String str2 = new String ("hello");char[] array = {'a','b','c'};String str3 = new String(array);String 为引用类型2.字符串比较相等1)== 比较地址String 使用 == 比较并不是在比较字符串内容...

2019-11-10 10:45:51 155

原创 Java之面对对象编程

面对对象编程一、 包包:是组织类的一种方式,就是一个文件夹,用package 关键字来表示导入包中的类public class Test { public static void main (String[ ] args) { java.util.Date date = new java.util.Date( ); System.ou...

2019-11-06 14:43:43 154

原创 Java之双向链表问题

双向链表问题1.双向链表的定义//节点的定义,一个节点有三个域class Node { public int data; public Node next; public Node prev; //不带参数的构造函数 public Node () { } //带一个参数的构造函数 public Node (int data...

2019-11-04 14:22:08 110

原创 Java之两个单链表的问题

涉及两个单链表的问题在我们的实际应用中,一个单链表往往难以解决问题,以下我们来关注涉及到两个单链表的问题。1.找两个单链表的第一个公共节点找两个单链表的第一个公共节点:先获取到两个链表长度的差值len;让长的链表走差值len步,两个再一起走; 保证pL是长的链表,pS 是短的链表;一起走的时候,相遇即为公共点. public static Node getIntersecti...

2019-11-04 13:52:35 346

原创 Java之单链表问题

单链表问题1.单链表及节点的定义class Node{ public int data; public Node next; public Node(){ } public Node(int data) { this.data = data; }}class LinkedList { public Node head...

2019-11-04 13:42:47 204

原创 Java之顺序表问题

顺序表问题1.顺序表的定义 class MyArrayList { private int[] elem;//定义顺序表 private int usedSize;//顺序表已用大小 private final int CAPACITY = 10; public MyArrayList(){ this.elem = new int[CA...

2019-11-04 13:10:54 162

原创 Java 之 类与对象

类和对象众所周知,java是面向对象的语言。面对对象的三个过程:找对象、创建对象、使用对象面向对象语言(OOP)的三大特征:继承、封装、多态类:一类对象的统称,是一个模板对象:类具体化的一个实例类相对于建造房子的图纸,对象相对于我们用图纸建造出的房子类及其实例化总之:类相当于一个模板,对象是由模板产生的一个具体化的实例,一个类可以产生无数个对象。声明一个类就是创建一个新的数据类型...

2019-10-23 08:07:11 195

空空如也

空空如也

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

TA关注的人

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