Java基础
乘风破浪的小太阳
要想飞得高,就得把地平线忘掉!
展开
-
JAVA 基数排序算法(详细实现过程介绍)
基数排序 是将整数按位数切割成不同的数字,然后按每个位数分别比较从而得到有序的序列。本文以数组中元素均为正整数来演示。给定一个数组 arr = [ 53, 3, 542, 748, 14, 214 ];准备十个桶:0~9第一轮按照元素的个位数排序0~9的各个桶内分别存放数组中各元素的个位数,按照数组元素的顺序依次存放53个位数为 3 ->放入第3个桶(桶下标为3)3个位数为 3 ->放入第3个桶(桶下标为3)542个位数为 2 ->放入第2个桶(桶下标为2)748个位原创 2020-11-04 10:10:26 · 523 阅读 · 2 评论 -
JAVA 归并排序算法(详细实现过程介绍)
概念:归并排序Merge Sort 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的典型应用。 它指的是将两个已经排序的序列合并成一个序列的操作。归并排序算法依赖归并操作。归并排序有多路归并排序、两路归并排序 , 可用于内排序,也可以用于外排序。这里仅对内排序的两路归并方法进行讨论。原理:把 n 个记录看成 n 个长度为 l 的有序子表 进行两两归并使记录关键字有序,得到 n/2 个长度为 2 的有序子表 重复第 2 步直到所有记录归并成一个长度为 n 的有序表为止。 图原创 2020-10-14 15:00:00 · 336 阅读 · 0 评论 -
JAVA 快速排序算法(详细实现过程介绍)
https://blog.csdn.net/jianyuerensheng/article/details/51258374?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.c原创 2020-09-30 16:57:19 · 557 阅读 · 0 评论 -
JAVA 希尔排序-移位法 算法(详细实现过程介绍)
希尔排序-移位法第一轮,第1次8,9,1,7,2,3,5,4,6,0gap=5preIndex=0insertVal=arr[5]arr[preIndex]=arr[0]如果当前数字小于前一个数字,即arr[5]<arr[0],则while循环,条件为,preIndex>=0且arr[5]<arr[0]满足,则把下标为preIndex的元素的下一个元素,即下标为preIndex+5对应元素的值赋值为下标为preIndex的元素对应的值,arr[5]=arr[0],即ar原创 2020-09-29 17:54:24 · 303 阅读 · 0 评论 -
JAVA 插入排序算法(详细实现过程介绍)
场景:对数组int []arr={ 101, 34, 119, 1},使用插入排序方式实现从小到大排序。思路分析:4个数,外层循环需要排序三轮,即:循环从1开始,循环次数为 数组的长度1、第一轮排序的结果为:34,101,119, 11)设定下标为0的第一个数不动,下标为1的数为要插入的数 insertVal,该数的前一个数的下标preIndex为0即: 1-12)使用while循环,循环条件为:preIndex>=0 && insertVal<insertVal原创 2020-09-18 18:15:37 · 335 阅读 · 0 评论 -
JAVA 选择排序算法(详细实现过程介绍)
场景:对数组int []arr={ 101, 34, 119, 1},实现从小到大选择排序。思路分析:4个数,外层循环次数为3即:数组长度-1第一轮循环1、设定最小数的值和下标先设定数组中的下标为0的元素为最小的数int min = arr[0]设定最小数的下标为0int minIndex = 0使用for循环,从下标为1的数开始,循环次数为数组的长度 3i=1min=101,minIndex = 0,arr[1]=34min>arr[1],则设置min=arr[1],原创 2020-09-15 18:30:33 · 503 阅读 · 0 评论 -
JAVA 冒泡排序算法(详细实现过程介绍)
冒泡排序3, 9, -1, 10, -24个数,外层循环需要排序三轮,即:循环从1开始,循环次数为 数组的长度-1第一轮排序结果为:获得最大元素在最右侧3, 9, -1, 10, -23, -1, 9, 10, -23, -1, 9, 10, -23, -1, 9, -2, 10第一轮的内部第1次排序,下标为0的元素与下标为1的元素相比,arr[0]<arr[1],则不需要交换,第1次排序结果为:3, 9, -1, 10, -2for(int j=0;j<4;j++){.原创 2020-09-14 18:39:04 · 302 阅读 · 0 评论 -
JAVA 实现数独
一、数独是什么?数独是源自18世纪瑞士的一种数学游戏。是一种运用纸、笔进行演算的逻辑游戏。玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫(3*3)内的数字均含1-9,且不重复。数独盘面是个九宫,每一宫又分为九个小格。在这八十一格中给出一定的已知数字和解题条件,利用逻辑和推理,在其他的空格上填入1-9的数字。使1-9每个数字在每一行、每一列和每一宫中都只出现一次,所以又称“九宫格”。水平方向有九横行,垂直方向有九纵列的矩形,画分八十一个小正方形原创 2020-09-11 10:10:27 · 4450 阅读 · 0 评论 -
JAVA 输入任何奇数 完成九宫格填数
1、最小值永远在最上行的中间格,最大值永远在最下行的中间格。2、最上行碰壁,下一个数填入右列最下格。3、最右列碰壁,下一个数填入上一行最左格。4、右上格有空就一直填下一个数;右上格有数,就将下一个数字填入上一个数的下一格。5、右上角的下一个数,必定在其下一格;左下角的上一个数,必定在其上一格。https://blog.csdn.net/weixin_44485261/article/details/88912889?utm_medium=distribute.pc_relevant...原创 2020-09-07 18:30:57 · 834 阅读 · 0 评论 -
JAVA 使用栈实现后缀表达式的计算
JAVA 使用栈实现中缀表达式转换后缀表达式一文中详细说明了如何将中缀表达式转换成后缀表达式。那么如何计算后缀表达式的结果呢?后缀表达式的求值思路:1、从左到右扫描后缀表达式2、如果遇到操作数,将其压入栈中。3、如果遇到操作符,则从栈中弹出两个操作数,计算结果,然后把结果入栈。4、遍历完后缀表达式,则计算完成,此时的栈顶元素即为计算结果。例如:后缀表达式"3 4 + 5 × 6 - "(1) 初始化栈,栈顶指针为空,从左至右扫描;(2) 遇到操作数3,入栈;(3)..原创 2020-09-01 20:01:59 · 855 阅读 · 0 评论 -
JAVA 使用栈实现中缀表达式转换后缀表达式
二、中缀表达式转换成后缀表达式此方法需要遵循几个规则:(1)如果读入操作数,则直接放入输出字符串;(2)如果读入一般运算符如+-*/,则放入堆栈,但是放入堆栈之前必须要检查栈顶,并确定栈顶运算符的优先级比放入的运算符的优先级低;如果放入的优先级较低,则需要将栈顶的运算符放入输出字符串;(3)如果读入(,因为左括号优先级最高,因此放入栈中,但是注意,当左括号放入栈中后,则优先级最低;(4)如果读入),则将栈中运算符取出放入输出字符串,直到取出(为止,注意:()不输出到输出字符串;.原创 2020-09-01 19:23:16 · 968 阅读 · 0 评论 -
JAVA 使用数组模拟栈的方式实现中缀表达式的计算
package com.sc.stack;public class Calculator { public static void main(String[] args) { String infixExpression ="1-5+50-1*2"; //44 char[] charArray = infixExpression.toCharArray(); ArrayStack numStack = new ArrayStack(20); .原创 2020-08-28 13:34:04 · 158 阅读 · 0 评论 -
JAVA 数组简单模拟栈的相关实现(入栈、出栈、遍历)详细实例验证
使用数组模拟栈的操作思路:使用数组来模拟栈步骤分析:1. 定义一个变量top表示栈顶,并初始化为 -13. 入栈操作,当有数据加入到栈时, top++; stack[top] = data;4. 出栈操作,先将栈顶的元素保存到一个变量中,然后再移动top变量,则int value = stack[top]; top--; return value;代码实现:1、创建数组对象ArrayStack.class1)构造方法,传入栈的最大容量 private i...原创 2020-08-19 17:25:09 · 918 阅读 · 0 评论 -
JAVA 实现双向链表根据节点大小按顺序新增、修改、删除操作
单向链表查找的方向只能是一个方向,而双向链表可以向前或者向后查找。结合JAVA 实现带头结点的链表根据节点大小按顺序新增、修改、删除节点单向链表的操作。在单向链表的基础上进行双向链表的增删改就比较简单了。根据上图,分析双向链表的新增,修改、删除操作思路:1) 遍历 方和 单链表一样,只是可以向前,也可以向后查找2) 添加 (默认添加到双向链表的最后)(1) 先找到双向链表的最后这个节点(2)temp.next=newHeroNode(3)newHeroNode.pre=t..原创 2020-08-18 20:19:22 · 1164 阅读 · 7 评论 -
JAVA 使用栈从尾到头打印单向链表
思路1. 上面的题的要求就是逆序打印单链表.2. 方式1: 先将单链表进行反转操作,然后再遍历即可,这样的做的问题是会破坏原来的单链表的结构,不建议3. 方式2:可以利用栈这个数据结构,将各个节点压入到栈中,然后利用栈的先进后出的特点,就实现了逆序打印的效果.举例演示栈的使用 Stack //逆向打印链表 public void reversePrintSinglelist(HeroNode2 head2){ //如果当前链表为空,或者只有一个节点,无需反转,直原创 2020-08-14 18:28:24 · 198 阅读 · 0 评论 -
JAVA 查找单向链表中倒数第K个节点的代码实现
思路1. 编写一个方法,接收 head 节点,同时接收一个 index2.index 表示是倒数第 index 个节点3. 先把链表从头到尾遍历,得到链表的总的长度 getLength4. 得到 size 后,我们从链表的第一个开始遍历 (size-index)个,就可以得到5. 如果找到了,则返回该节点,否则返回 nulll //获取倒数第K个节点 public HeroNode2 getLastIndexNode(HeroNode2 head2,int index..原创 2020-08-07 18:32:54 · 603 阅读 · 2 评论 -
JAVA 实现单向链表的反转
JAVA 实现带头结点的链表根据节点大小按顺序新增、修改、删除节点该文章已实现单向链表的创建及遍历等操作。那么在此基础上,如何实现单向链表的反转呢?实现思路:1. 先定义一个节点 reverseHead = new HeroNode();2. 从头到尾遍历原来的链表,每遍历一个节点,就将其取出,并放在新的链表reverseHead 的最前端.3. 原来的链表的head.next = reverseHead.next代码实现上代码:在SingleLinkedList2.cl..原创 2020-08-06 18:48:25 · 529 阅读 · 0 评论 -
JAVA 获取单向链表中有效节点的个数
JAVA 实现带头结点的链表根据节点大小按顺序新增、修改、删除节点 该文章已实现单向链表的创建及遍历等操作。那么在此基础上,如何获取到单链表的节点的个数(如果是带头结点的链表,不需要统计头节点)呢?实现思路:1、先判断链表是否为空,为空则return。2、创建临时节点temp指向链表的头部,用于后续循环。3、创建变量size,用于存储有效节点个数。4、使用while循环,当temp的下一个节点为空时,则循环结束break; 否则,size++,同时将temp后移。5...原创 2020-08-06 13:01:49 · 919 阅读 · 0 评论 -
JAVA 使用单向环形链表解决约瑟夫问题
约瑟夫问题:设编号为1,2,… n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m 的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。nums = 10 , 即有10个人 start = 2, 从第二个人开始报数count = 3, 数3下1、创建一个小孩节点对象 class Child{ private int no; private Chil原创 2020-08-06 12:48:58 · 190 阅读 · 0 评论 -
JAVA 实现带头结点的链表根据节点大小按顺序新增、修改、删除节点
思路:需要按照编号的顺序添加1. 首先找到新添加的节点的位置, 是通过辅助变量(指针), 通过遍历来搞定2. 新的节点.next = temp.next3. 将temp.next = 新的节点原创 2020-08-04 18:36:26 · 412 阅读 · 0 评论 -
JAVA 将两个有序链表合并为一个有序链表
将两个有序链表合并为一个有序链表思路:1.必须保证两个链表为有序链表2.在两个链表都不为空的条件下,设一个 last=null;(1)如果链表1的值小于等于链表2的值,进行循环,先放链表1的值到新链表result,如果result为空,视为头插,如果不为空,视为尾插,其中要保证last永远为最后一个结点,最后让循环走起来(2)如果链表2的值小于链表1的值,与(1)中方法相同,只是链表1全换为链表2即可3.如果链表2为空了,链表1不为空时,把链表1接在last的下一个,之后,可以.原创 2020-08-04 13:03:53 · 2262 阅读 · 0 评论 -
JAVA 实现带头结点的链表按添加顺序新增节点并遍历
链表是有序的列表,但是它在内存中是存储如下从上述图中可以看出:1) 链表是以节点的方式来存储,是链式存储2) 每个节点包含 data 域:存储节点的具体信息, next 域:指向下一个节点.3) 链表的各个节点不一定是连续存储.4) 链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定单链表(带头结点) 逻辑结构示意图如下单链表的应用实例:使用带 head 头的单向链表实现 –向链表中增加、删除、修改最后遍历的操作。1、先创建一个LinkedNode对象,代表链表中的原创 2020-07-29 18:45:34 · 754 阅读 · 0 评论 -
JAVA 数组模拟环形队列
在上一篇JAVA 数组模拟队列的文章中存在问题:当队列中的元素全部取出后,输出队列元素为空。再次向队列中添加元素时,提示队列已满,无法添加。因为队列中数组只能使用一次,没有达到复用的效果。本文将使用环形队列解决这个问题。数组模拟环形队列思路分析:1.基于之前的front 变量,在环形队列中,front调整为指向队列的第一个元素,即arr[front]。front 的初始值为0。2.基于之前的 rear 变量,在环形队列中,rear 调整为指向队列的最后一个元素的...原创 2020-07-28 18:37:28 · 171 阅读 · 0 评论 -
JAVA 使用数组模拟队列
一、队列的概念1、队列是一个有序列表,可以用数组或是链表来实现。2、遵循先入先出的原则(例如:银行叫号排队)。即:先存入队列的数据,要先取出。后存入的要后取出二、数组模拟队列队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图。其中 maxSize 是该队列的最大容量。因为队列的输出、输入是分别从前后端来处理,因此需要两个变量 front 及 rear 分别记录队列前后端的下标, front 会随着数据输出而改变,而 rear 则是随着数据输入而改变。..原创 2020-07-24 13:00:09 · 161 阅读 · 0 评论 -
JAVA 将二维数组转化为稀疏数组保存到文件,再读取文件转化为二维数组
场景:将五子棋盘(二维数组)中,有效的数据保存到稀疏数组中并将稀疏数组保存到本地文件。然后将读取文件中的数据,并将数据转换成二维数组。因为五子棋该二维数组中有很多值是默认值 0, 因此记录了很多没有意义的数据.所以这里使用到稀疏数组,保存有效数据。解题思路:二维数组 转 稀疏数组并存入本地文件:1. 遍历原始的二维数组,得到有效数据的个数 sum2. 根据sum 就可以创建 稀疏数组 sparseArr int[sum + 1] [3]3. 将二维数组的有效数据数...原创 2020-07-23 17:48:37 · 582 阅读 · 0 评论 -
面试题 & 快速找出数组中两个数字,相加等于某特定值的 四种实现方式
JAVA基础面试题:快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值。假设数组中的都是各不相等的整数。这道题看起来很简单,但往往在面试中许多人一下子答不出来。下面四种实现方式使用相对巧妙的方法来实现上述算法,供参考 。方法一1、拿目标值减去循环中的某个数组的元素值。2、如果元素符合条件,就将下标放入到Map集合中。public static Map<Integer,Integer> method1(int[] nums, int sum){...原创 2020-07-21 11:53:54 · 4166 阅读 · 0 评论 -
Java 中Collection与Collections的区别(实例)
1、java.util.Collection 是一个集合接口(集合类的一个顶级接口)。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式,其直接继承接口有List与Set(不包含Map)。Java集合框架图可知其具体子接口及各实现类。Collection...原创 2019-12-05 14:12:59 · 147 阅读 · 0 评论 -
JAVA基础 & hashCode与equals详解
在了解hashCode与equals方法之前,需要知道:1、JAVA八种基本数据类型的变量没有equals和hashcode方法,只能应用==进行比较;2、变量1==变量2,比较的是对象在堆内存中的地址,如果要比较其中的内容的话,就要用equals方法(前提是在自己定义的对象中重写了equals方法,如果没有重写equals方法使用equals比较和==的意义是相同的,都是比较对象存放的地...原创 2019-12-05 10:54:20 · 204 阅读 · 0 评论 -
DRUID连接池的实用 配置详解
DRUID介绍DRUID是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0、DBCP、PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况。正式版本下载maven中央仓库:http://central.maven.org/maven2/com/alibaba/druid/获取Druid的源码Druid是一个开源项目,源码托管...转载 2019-11-04 14:34:45 · 1356 阅读 · 0 评论 -
Java synchronized 同步锁与ReenTrantLock可重入锁的区别
一、ReenTrantLock可重入锁与synchronized 同步锁的区别锁的实现synchronized是Java中的关键字,是依赖于JVM实现的,Java 虚拟机团队在 JDK1.6 为 synchronized 关键字进行了很多的优化,但这些优化都是在虚拟机层面实现的,并没有直接暴露给我们。而ReenTrantLock是JDK API 实现的,有直接的源码可供阅读。ReenTra...原创 2019-11-04 12:44:43 · 1211 阅读 · 0 评论 -
Java中synchronized的使用详解
synchronized用法概述synchronized是JAVA中的关键字,是一种同步锁。它修饰的对象有以下几种:1、修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号括起来的代码,作用的对象是调用这个代码块的对象; 一个线程访问一个对象中的synchronized(this)同步代码块时,其他试图访问该对象的线程将被阻塞。2、修饰一个方法,被修饰的方法称为同步方法,...原创 2019-10-30 13:03:39 · 273 阅读 · 0 评论 -
JAVA 基于HttpClient-4.4传递json字符串作为参数发送POST请求 详细封装说明
场景:POST请求,基于json格式,请求报文中部分字段在自动化测试中,是唯一的,所以需要参数化。将参数化后的json报文作为该POST请求的参数,发送并检查是否请求成功。以下是详细说明一、测试类:PushClaimTest.java定义方法 test(),调用 工具类 Helper.pushClaim()的方法这里有两种方式:1、创建Map集合,将所有需要参数化的json字符串的...原创 2019-09-11 17:32:32 · 1458 阅读 · 2 评论 -
Java中return,break,continue用法总结
Java中return的作用《Java编程思想:第四版》介绍:return语句作为一个无条件的分支,无需判断条件即可发生。return语句主要有两个用途:一是用来表示一个方法返回的值(假定没有void返回值)。二是指它导致该方法退出,并返回那个值。根据方法的定义,每一个方法都有返回类型,返回类型可以是基本类型或引用类型。同时每个方法都必须有个结束标志,因此,就出现了return。当方法的返...原创 2019-10-11 20:17:52 · 4733 阅读 · 0 评论 -
Java 常用集合总结(详细)
一、集合和数组概念在Java中,数组是存储某一类型的数据的容器,但是这个容器有局限性,因为定义后的数组长度不可变,超出长度后,再存放数据就会报错(例如:数组下标越界)。而且数组只能存放基本数据类型和对象在开发过程中,大多时候数据长度是不确定的,这就需要有不定长的容器来存放数据,这就涉及到集合Collection,Java 中的集合Collection都采用了泛型实现,可以存入任何类型的对象...原创 2019-09-20 14:03:26 · 343 阅读 · 0 评论 -
Java 中 try-catch,throw和throws的使用
Java 中的异常有很多,这种异常机制,可以帮助处理程序中未知的错误。关于异常的处理有try catch 程序块、throw 、throws。以下分别对这三种进行介绍。一、try...catchtry-catch用来捕获代码段的异常并做出处理try-catch代码块分两块,第一块是try{} ,第二块是catch(exception的引用){}。try-catch一般放在循环放...原创 2019-09-21 15:18:31 · 20138 阅读 · 4 评论 -
Java 常见编码格式及编码转换场景介绍
一.常见的编码格式介绍人类的语言种类很多,因而表示这些语言的符号就很多。计算机无法用一个基本的存储单元— byte 来表示这些语言,所以必须要经过拆分或一些翻译工作,才能让计算机能理解。假设计算机能够理解的语言是英语,其它语言要能够在计算机中使用必须经过翻译,把自己的语言翻译成英语。这个翻译的过程就是编码。这样就可以想象只要不是说英语的国家要能够使用计算机就必须要经过编码。总结编码的原因:...原创 2019-09-24 13:02:28 · 889 阅读 · 0 评论 -
Java 元注解入门介绍
注解(Annotation)相当于一种标记,在程序中加入注解就等于为程序打上某种标记,没有加,则等于没有任何标记,以后,javac编译器、开发工具和其他程序可以通过反射来了解你的类及各种元素上有无何种标记,看你的程序有什么标记,就去干相应的事,标记可以加在包、类,属性、方法,方法的参数以及局部变量上。元注解元注解是什么意思呢?元注解是可以注解到注解上的注解,或者说元注解是一种基本注...转载 2019-09-25 13:50:46 · 189 阅读 · 0 评论 -
JAVA基础之I/O体系及常用类
I/O流的概念I/O流 即输入Input流/ 输出Output流的缩写,常见的是电脑屏幕输出设备和键盘鼠标输入设备,其广义上的定义就是:数据在内部存储器和外部存储器或其他周边设备之间的输入和输出;即:数据/ 输入/ 输出。流是一个抽象但形象的概念,Java中把不同的输入/输出源(键盘,文件,网络连接等)抽象的表述为 “流”(Stream)。可以简单理解成一个数据的序列,输入流表示从一个源读...原创 2019-09-27 12:57:34 · 207 阅读 · 0 评论 -
Java 创建线程的三种方式和线程池实现的四种方式
本文主要介绍Java线程的三种创建方式和线程池的四种实现方式。1.进程和线程 A:进程概念 进程:进程指正在运行的程序。确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能。 B:线程的概念 线程:线程是进程中的一个执行单元(执行路径),负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程中是可以有多个线程的,这个应...原创 2019-09-29 13:49:18 · 246 阅读 · 0 评论 -
Java 关于读取大文件的几种基本用法
关于逐行读取大文件 , 找了一些方法进行比较验证, 并下载了一个比较大一点的日志文件用来测试。使用BufferedReader读取文件(InputStreamReader、FileReader) 使用 Scanner函数来读取文件 Apache的commons-io包读取文件使用BufferedReader读取文件使用java.io.BufferedReader、InputStrea...原创 2019-10-08 13:58:16 · 514 阅读 · 0 评论