自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 线程安全问题(synchronized,volatile关键字的用法及作用)

一,什么是线程安全问题?1.1线程安全问题的例子:我们通过下面这段代码及运行结果来观察线程安全问题:public class Main { static class Counter{ public int count = 0; void increase(){ count++; } } public static void main(String[] args) throws Interru.

2022-05-24 22:57:41 1130

原创 如何创建并使用线程?

一个进程正在运行时至少会有一个线程在运行。每个线程都是一个独立的执行流,多个线程之间是“并发执行的”。我们看第一个多线程程序:public class Main { public static void main(String[] args) { while(true){ System.out.println(Thread.currentThread().getName()); } }}运行结果:这里打印出的ma

2022-05-22 16:28:25 827

原创 进程与线程

一,什么是进程?进程是操作系统结构的基础,是一次程序的执行,是一个程序及其数据在处理机上顺序执行时所发生的活动,是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。我们打开任务管理器:此时我们完全可以将运行在内存内存中的exe文件理解成进程(进程是受操作系统管理的基本运行单元)。程序其实就是指令序列,这些指令可以让cpu完成指定的任务。在Java中,.java文件经过编译之后形成.class文件,而在windows中启动一个jvm虚拟机就相当于创建了一个进程,在虚.

2022-04-29 09:49:55 271

原创 BM65 最长公共子序列(二)动态规划

BM65动态规划专项牛客链接问题描述:给定两个字符串str1和str2,输出两个字符串的最长公共子序列。如果最长公共子序列为空,则返回"-1"。目前给出的数据,仅仅会存在一个最长的公共子序列思路分析:初读题目首先要解决的问题是区分子串和公共子序列:1.子串:...

2022-04-13 22:37:57 635 1

原创 牛客网必刷top101之哈希BM50两数之和,BM51数组中出现次数超过一半的数字,BM52数组中只出现一次的两个数字,BM53缺失的第一个正整数, BM54三数之和

BM50两数之和牛客链接题目描述:给出一个整型数组 numbers 和一个目标值 target,请在数组中找出两个加起来等于目标值的数的下标,返回的下标按升序排列。解题思路:一般的暴力搜索思路在这里我们不做赘述,首先我们看到该题的返回值一定是一个长度为2的int型数组,用来保存符合题意的元素的下标(注意:题目要求下标是从1开始的),所以我们创建一个数组,接下来我们创建一个hashmap用来映射数组中的元素与下标之间的关系,遍历题中给出的数组,如果target减去当前的元素可以在has.

2022-04-08 15:55:22 452 1

原创 斐波那契数列的三种解法

斐波那契数列指的是这样一个数列:1、1、2、3、5、8、13、21、34它的第一个和第二个数字都为1,从第三项开始它的每个数字都是其前两项数字之和。1.递归解法由斐波那契数列的定义我们不难写出它的递归解法,代码如下: public int Fibonacci(int n) { if(n == 1 || n ==2){ return 1; } return Fibonacci(n-1) + Fibonacci(n - 2

2022-04-08 14:12:45 2197

原创 直接插入排序,希尔排序,选择排序,冒泡排序,快速排序,归并排序图解及代码

一,直接插入排序1.思路分析:第一步我们假定数组中的首元素是有序的,然后从第二个元素开始,先把该元素拷贝到temp中,我们用temp与该元素下标之前的元素进行比较如果该元素的值大于temp那么就让它向后移动一位,这样当遇到比temp小的元素时该元素后面的位置插入temp。2.画图演示:3.代码描述: public static void insertSort(int [] array){ if(array.length <= 1){ .

2022-04-03 08:34:25 832 1

原创 判断两颗二叉树是否相同,判断一棵树是不是另一棵树的子树,求二叉树的高度,判断二叉树是不是平衡二叉树,判定一个二叉树是否是对称,判断一个树是不是完全二叉树,二叉树的层序遍历并将值分层存储的代码以及思路。

一.检查两颗树是否相同。OJ链接1.问题描述:给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。2.思路分析:我们看到oj题中函数的参数是两个根节点,首先这两个根节点如果都为空那么这两颗二叉树也是相同的直接return true即可,其次如果这两颗树中有一个根节点不为空那么这两棵树一定不相同直接return false即可,最后我们需要判断这两个节点的值是否相同,如果相同则需要判断这两棵树的左子.

2022-03-23 10:03:07 1006 5

原创 链表反转,链表内指定区间反转,链表中的元素每k个一组进行翻转思路分析及代码

1.反转链表问题描述:给定一个单链表的头结点pHead(该头节点是有值的它的val是1),长度为n,反转该链表后,返回新链表的表头。思路分析:拿到题目看到方法的参数为单链表的头节点,如果头节点为null或者头节点的下一个节点为空则不用反转直接返回头节点即可;如果这两者都不为空那么需要从第二个节点开始依次使用头插法对链表进行修改,由于每次在链表头插入元素的时候需要改变该元素的下一个节点指向头节点这样就会导致后面的节点丢失,所有在插入前,需要定义一个新节点用于保存下一个节点。(注意:反转链表时,原来.

2022-03-17 12:56:41 1047 11

原创 Iterable的常见方法以及含义

1.IterableIterable是java集合接口的顶级接口之一。这是这个接口中的iterator方法,用来返回一个实现了Iterator接口的对象。1.1Iterator接口中的方法:1.1.1forEachRemaining方法看下面这段代码:import java.util.ArrayList;import java.util.Iterator;public class Test { public static void main(Stri.

2022-03-13 13:30:00 7756

原创 Collection,List中的常见方法签名以及其含义

1.Collection中的方法1.1Iterator<E> iteraror()该方法会返回一个用于访问集合中公共元素的迭代器,关于迭代器中的方法,我已经在上篇博客中做了解读,这里不再赘述。1.2 int size()返回当前存储在集合当中的元素个数1.3boolean isEmpty()如果集合中没有元素,返回true;1.4boolean contains(Object obj)如果集合中包含了一个与obj相等的对象,返回true1.

2022-03-13 10:45:28 426 1

原创 浅谈Java中的异常

在理想的世界中,用户输入数据的格式永远是正确的,选择打开的文件也一定存在,代码永远不会出bug。然而,在现实世界中却充满了不良的数据和有问题的代码,现在我们在这篇博客中讨论一下这个问题。在Java中,将程序执行过程中发生的不正常行为称为异常的,比如我们之前遇到过的算术异常(0做除数),数组越界异常,空指针异常。而在Java中不同类型的异常都有与其对应的类来进行描述。1.异常的体系结构在java中,异常对象都继承与Throwable类的一个类实例,而且如果java中内置的异常类不能满足需求

2022-03-12 22:58:01 199 2

原创 Java之图书管理系统(手把手教程,超详细)

在前面几篇博客中,我陆续讲解了java的三大特性封装,继承和多态,这次的简单图书管理项目主要是为了练习继承,接口和多态的使用,那么就用这篇博客来讲解一下这个小项目,目的只是为了练习。我们先来分析一下,首先进入图书管理系统,要求使用者首先输入自己的名字,输入完成后选择进入系统的身份,有管理员和普通用户两种身份,要求i管理员有增添图书,删除图书,查找图书,展示图书和退出系统五种功能;而作为普通用户则要求有查找图书,借阅图书,归还图书和退出系统四种功能。一,BOOK包Book类我们发现不论

2022-03-08 09:43:11 17221 16

原创 抽象类,接口与内部类

一.抽象类1.什么是抽象类?在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的。如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是一个抽象类。比如:在上面这幅图中,正方形,三角形,圆形类都是图形类的子类,当我们发出图形应该如何计算面积时,我们知道对于不同的图形我们有不同的计算面积的方法,而计算图形面积的方法就是一个抽象方法,再例如:其实,抽象方法就是加上abstract关键字然后去掉大括号直接分号结束的方法 。例如.

2022-03-06 21:55:13 241 3

原创 多态,向上转型和向下转型以及final关键字

1.多态1.什么是多态?(继承是多态的前提)多态通俗来讲就是各种形态,具体来讲就是去完成某个行为,当不同的对象去完成时会产生不同的形态。在代码层面来说就是子类的每个对象也是父类的对象,例如:每个经理都是一个员工,但反之,并不是每位员工都是经理,这就是继承中的“is——a”规则,它的另外一种表述则是替换规则,就i是说程序中出现父类对象的任何地方都可以使用子类对象来替换。2.如何使用多态呢?代码中体现的多态性其实就是父类引用指向子类对象一般格式有两种:1. 父类名称 对象..

2022-03-06 09:20:17 241 5

原创 浅谈static关键字,代码块,继承关系上的执行顺序。

一.static关键字1.为什么要有static关键字?之前我们在类中定义成员变量时,每个对象都会包含一份(称为实例变量),因为要使用这些信息来描述具体的对象。假如每个对象的某个属性相同时,那么这个属性大可不必在这个类所创建的每个对象中都存储一份,而是需要让所有对象来共享。在Java中,被static修饰的成员,称之为静态成员,也可以称为类成员,其不属于某个具体的对象,而是所有对象共享的。2.如何使用static关键字?1.static修饰成员变量static修饰成员变量,称为静.

2022-03-02 19:57:41 610 3

原创 浅谈继承及区分this和super关键字

一.什么是继承?继承就是基于已有的类创建新的类,继承已存在的类就是复用(继承)这些类的方法,而且可以增加一些新的方法和字段,使新类能够适应新的情况。二.为什么要有继承?1.继承是多态的前提;2.继承专门用来进行共性抽取来实现代码的复用;三.如何使用继承呢?...

2022-02-27 11:20:04 237

原创 如何构建一个标准的类?

1.一个标准的类通常要拥有下面四个组成部分:<1>所有的成员变量都要使用private关键字修饰(封装性的体现);<2>为每一个成员变量编写一对Getter和Setter方法;<3>编写一个无参数的构造方法;<4>编写一个全参数的构造方法;在第一个组成部分中我们很疑惑到底什么是封装性,其实封装性其实就是将一些细节信息隐藏起来,对外界不可见。那么为什么要有封装性呢?我们来用一个例子来描述我们遇到的具体问题:class Person{

2022-02-25 19:00:53 769

原创 java中的类和对象

面向对象程序设计(OOP)是当今主流的程序设计语言,取代了结构化或过程式的编程技术。面向对象的程序是由对象组成的,每个对象包含对用户公开的特定功能部分和隐藏的实现部分。事实上对一些规模较小的问题将其分解为过程的开发方式比较理想,但是面向对象更加适合解决规模较大的问题。注意:面向过程和面向对象并不是一门语言,而是解决问题的方法,没有哪个好坏之分,都有各自的应用场景。面向对象的程序设计一般分为三个步骤:1.找对象;2.创建对象;3.使用对象。一.类类是用来对一个实体(对象)来进行描述

2022-02-23 12:36:59 407

原创 动态内存管理,浅谈malloc,calloc,realloc函数与柔性数组(解决上一个通讯录开始创建固定大小数组的问题)

动态内存管理,浅谈malloc,calloc,realloc函数与柔性数组(解决上一个通讯录开始创建固定大小数组的问题)

2022-01-25 21:56:04 637

原创 c语言实现通讯录实现增删改查功能并且能对联系人进行排序

c语言实现通讯录实现增删改查功能并且能对联系人进行排序

2022-01-24 21:49:23 1906 1

原创 五子棋(机器人随机下棋简单版本)

相信大家小时候都玩过五子棋游戏,五子棋是起源于中国古代的传统黑白棋之一,在一块类似围棋的棋盘上,你和对手轮流放下黑白棋子,无论是横竖还是斜。只要有五颗相同颜色的棋子连成一线即可 获得一句胜利。它不仅能使人增强思维能力,提高智力,而且富含丰富的哲理,有助于修身养性。现在五子棋有“连珠”、“连五子”、“五子连珠”、“串珠”、 “五目”、“五目碰”、“五格”等多种称谓。游戏步骤如下: 准备棋盘。 先手后手轮流走棋 每颗子所投的地方没有限制。 只要任意一方在棋盘上且同一个回合上连

2021-12-04 18:54:30 4827

原创 简易扫雷游戏

相信大家都玩过扫雷游戏,在学习了二维数组之后,我也用c语言写了一个简单的扫雷游戏规则如下:1.通过对宏Row和宏List来设置游戏的棋盘大小(如果想玩10x10的扫雷则需设置Row和List为12);2.通过对 宏BoomNumber 来设置局中雷的个数(雷的个数需要<=(Row-2)*(List-2));3.对 用户输入要扫描的坐标,如果有雷则雷爆炸游戏结束,如果没有雷则统计出该坐标周围的雷的个数,一直循环此操作,直到棋盘中未扫描的地方全是雷为止则扫雷成功。#pragma warn

2021-11-27 20:22:55 4124 2

空空如也

空空如也

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

TA关注的人

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