java
weixin_42623604
这个作者很懒,什么都没留下…
展开
-
JVM中的一些细节String/方法区
String s=new String(“ab”)1.若常量池中不存在ab,则在常量池中创建一个对象"ab",在堆中创建一个对象;2.若常量池中存在ab,则只在堆中创建一个对象String s=new String(“a”)+new String(“b”)创建六个对象:1.new StringBuilder对象2.new String(“a”)3.常量池中的a4.new String(“b”)5.常量池中的b6.StringBuilder的toString():new String(“a原创 2021-09-04 17:37:48 · 150 阅读 · 0 评论 -
MyBatis
Mybatis1. Mybatis基本信息1.1 概述1.mybatis是一个持久层框架,它封装了jdbc的很多细节,使开发者只需要关注sql语句本身,无需关注注册驱动,创建链接等防砸过程,它使用ORM思想实现了结果集的封装。2.ORM:Object Relational Mapping 对象关系映射就是把数据库表和实体类及实体类的属性对应起来,让我们可以操作实体类来实现操作数据库表。1.2 入门1.读取配置文件2.创建SqlSessionFactory工厂3.创建SqlSession4原创 2021-08-20 19:21:47 · 283 阅读 · 0 评论 -
CodeTop 21/23
21. 合并两个有序链表递归法:/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.ne原创 2021-08-19 21:28:07 · 74 阅读 · 0 评论 -
CodeTop53/141/142
53. 最大子序和代码class Solution { public int maxSubArray(int[] nums) { //sum代表加到当前位置的最大值,max保存总的最大值 int sum=0; int max=nums[0]; for(int i=0;i<nums.length;++i){ //若前面的sum<0,则当前sum值等于nums[i]的值 sum原创 2021-08-18 15:39:02 · 50 阅读 · 0 评论 -
CodeTop 42/33
42. 接雨水按列求://计算每个节点左边的最大值和右边的最大值,选择较小的值与当前节点值做减法,大于0则该差值为储水量。class Solution { public int trap(int[] height) { int sum=0; //外层循环是为了计算每个位置可以接多少水,最左和最右接不到水,所以范围是1~height.length-1 for(int i=1; i<height.length-1; ++i){原创 2021-08-18 02:43:46 · 104 阅读 · 0 评论 -
CodeTop 912/15/160
912. 排序数组归并排序:class Solution { int tmp[]; public int[] sortArray(int[] nums) { tmp=new int[nums.length]; mergeSort(nums, 0, nums.length-1); return nums; } //归并排序 //1.将数组分为两半,分别对两边的数组进行排序 //2.对合并的数组进行归并操作原创 2021-08-16 21:07:15 · 57 阅读 · 0 评论 -
CodeTop 3/912/215/146
3. 无重复字符的最长子串法一:class Solution { public int lengthOfLongestSubstring(String s) { // HashSet<Character> set=new HashSet<>(); //left~right组成滑动窗口,len计算滑动窗口内字符数 int left=0,right=0,len=0; //right不能超过数组的长原创 2021-08-14 21:56:22 · 272 阅读 · 0 评论 -
JVM基础
JVM(Java虚拟机)1.JVM体系结构类加载器作用:加载class文件原创 2021-08-09 18:25:02 · 61 阅读 · 0 评论 -
剑指offer 2021/8/7
37. 序列化二叉树代码:序列化采用层次遍历,root不为空则将左右子树添加进队列。反序列化首先将输入字符串用’’,“分隔开,然后用指针遍历字符串数组,若不为"null”,则添加进二叉树,否则遍历下一个数组元素。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(原创 2021-08-07 23:24:47 · 48 阅读 · 0 评论 -
剑指offer 2021/8/6
52. 两个链表的第一个公共节点代码:/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */public class Solution { public ListNo原创 2021-08-06 23:21:11 · 131 阅读 · 1 评论 -
剑指offer 2021/8/5
41. 数据流中的中位数代码:创建一个大顶堆一个小顶堆,大顶堆中保存较大的元素,小顶堆中保存较小的元素。class MedianFinder { /** initialize your data structure here. */ Queue<Integer> A,B; public MedianFinder() { //小顶堆(默认),且堆中保存较大的元素 A=new PriorityQueue<>();原创 2021-08-05 23:13:42 · 102 阅读 · 1 评论 -
剑指offer 2021/8/4
59 - II. 队列的最大值代码:维护一个双端递减序列,有新元素加入时,将队列中比该元素小的元素出队。原队列执行出队操作时,若出队的元素与双端队列中元素相等,则同时执行出队操作。class MaxQueue { LinkedList<Integer> queue; //维护一个递减序列 LinkedList<Integer> max; public MaxQueue() { queue = new LinkedList<原创 2021-08-04 19:27:38 · 57 阅读 · 0 评论 -
剑指offer 2021/8/3
64. 求1+2+…+n算法思想:if(A && B) // 若 A 为 false ,则 B 的判断不会执行(即短路),直接判定 A && B 为 false;if(A || B) // 若 A 为 true ,则 B 的判断不会执行(即短路),直接判定 A || B 为 true;本题中,n > 1 && sumNums(n - 1) // 当 n = 1 时 n > 1 不成立 ,此时 “短路” ,终止后续递归。代码:cla原创 2021-08-03 22:31:41 · 48 阅读 · 0 评论 -
剑指offer 2021/8/2
66. 构建乘积数组代码:动态规划class Solution { public int[] constructArr(int[] a) { int len = a.length; if(len == 0) return new int[0]; int[] dp = new int[a.length]; dp[0] = 1; int tmp = 1; //计算i左边的乘积 fo原创 2021-08-02 20:02:50 · 64 阅读 · 0 评论 -
剑指offer 2021/8/1
58 - I. 翻转单词顺序法一:class Solution { public String reverseWords(String s) { if(s.equals("")) return ""; int m = 0; //去掉字符串前的空格 while(s.charAt(m)==' '){ s = s.substring(m+1); if(s.equals原创 2021-08-01 22:14:08 · 60 阅读 · 0 评论 -
剑指offer 2021/7/31
55 - I. 二叉树的深度法一:递归实现DFSclass Solution { public int maxDepth(TreeNode root) { if(root == null){ return 0; } return Math.max(maxDepth(root.left), maxDepth(root.right))+1; }}法二:BFS常规写法,但是要注意一层遍历结束之后res再执行加一操原创 2021-08-01 03:29:48 · 87 阅读 · 0 评论 -
剑指offer 2021/7/30
56 - I. 数组中数字出现的次数代码:class Solution { public int[] singleNumbers(int[] nums) { LinkedList<Integer> list = new LinkedList<>(); for(int num : nums){ if(list.contains(num)){ list.remove(list.index.原创 2021-07-31 04:32:17 · 144 阅读 · 0 评论 -
剑指offer 2021/7/29
27. 二叉树的镜像bfs遍历整个二叉树,并将节点的左右子树互换。代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public TreeNode mirro原创 2021-07-30 23:38:51 · 44 阅读 · 0 评论 -
剑指offer 2021/7/28
13. 机器人的运动范围代码:回溯法。class Solution { int m, n; int res = 0; int[][] visited; public int movingCount(int m, int n, int k) { this.m = m; this.n = n; visited = new int[m][n]; dfs(0, 0, k); return res;原创 2021-07-29 00:53:11 · 51 阅读 · 0 评论 -
剑指offer 2021/7/27
38. 字符串的排列代码:回溯。class Solution { LinkedList<String> res = new LinkedList<>(); char[] c; public String[] permutation(String s) { c = s.toCharArray(); backtrack(0); return res.toArray(new String[0]); }原创 2021-07-28 03:16:56 · 48 阅读 · 0 评论 -
剑指offer 2021/7/26
14- I. 剪绳子法一:动态规划。1.dp[2]=1;2.对于总长度为i的绳子,假设减去了长度为j的一段,若剩下的绳子不再继续剪,则乘积为j*(i-j);若剩下的绳子继续剪,则乘积为j * dp[i-j]。j可以取值为2~i-1,最大乘积为max(dp[i], j*(i-j), j*dp[i-j])。class Solution { public int cuttingRope(int n) { int[] dp = new int[n + 1]; //长原创 2021-07-27 02:51:42 · 48 阅读 · 0 评论 -
剑指offer 2021/7/25
57 - II. 和为s的连续正数序列算法思想leetcode题解法一class Solution { public int[][] findContinuousSequence(int target) { int i = 1; double j = 2.0; ArrayList<int[]> list = new ArrayList<>(); while(i < j){原创 2021-07-25 23:30:17 · 100 阅读 · 1 评论 -
剑指offer 2021/7/24
63. 股票的最大利润算法思想:动态规划。当前位置最大值等于max(前一个位置最大值,当前位置值-记录的最小值)。代码:class Solution { public int maxProfit(int[] prices) { if(prices.length == 0) return 0; int min = prices[0], profit = 0; for(int i = 1; i < prices.length; ++i){原创 2021-07-25 03:51:45 · 89 阅读 · 0 评论 -
反射与注解
反射与注解1. 反射1.1 基本信息1.概念:将类的各个组成部分封装为为其他对象,这就是反射机制。2.好处可以在程序运行过程中,操作这些对象;可以解耦,提高程序的可扩展性。1.2 Class类1.2.1 获取class对象的方式:Class.forName(“全类名”):将字节码文件加载进内存,返回class对象;(多用于配置文件,将类名定义在配置文件中,读取文件,加载类)类名.class:通过类名的属性class获取;(多用与参数的传递)对象.getClass():getC原创 2021-07-25 00:40:50 · 59 阅读 · 0 评论 -
MySQL
MySQL1. MySQL基本信息1.1 数据库分类关系型数据库:(SQL)MySQOL, Oracle, Sql Server, DB2, SQLlite通过表和表之间,行和列之间的关系进行数据的存储非关系型数据库:(NOSQL) Not Only SQLRedis,MongDB非关系型数据库,对象存储,通过对象自身的属性来决定1.2 DBMS(数据库管理系统)DB存数据,DBMS管理和操作数据数据库的管理软件,科学有效地管理数据,维护和获取数据;MySQL本质是数据库管原创 2021-07-24 00:49:29 · 81 阅读 · 0 评论 -
剑指offer 2021/7/22
62. 圆圈中最后剩下的数字算法思想:动态规划。假设f(n)代表n个数字依次删除第m个节点最后剩下的数字,执行第一次删除操作后,从第m%n个节点开始继续执行下一轮操作,此时可以将它看作f(n-1)的问题,而原数组中的m%n节点对应f(n-1)问题中的0节点,即f(n)=(f(n-1)+m)%n。当n=1时,一定是编号为0的节点为最后剩下的节点,即f(0)=1。通过该状态转移方程可以求解。代码:class Solution { public int lastRemaining(int n,原创 2021-07-23 03:56:48 · 121 阅读 · 0 评论 -
剑指offer 2021/7/21
59 - I. 滑动窗口的最大值算法思想:使用两个指针i,j分别指向滑动窗口左端和右端。将数组元素放入一个队列中,要求:1.队列中必须只包含滑动窗口中的元素,这就需要比较队列中第一个元素和nums[i-1],若相等,则进行出队操作,若不等,则说明此元素在之前已执行出队列操作。1.队首必须是滑动窗口中的最大元素,且队列需满足非严格递减,即每次将nums[j]和队列中最后一个元素进行比较,若大于最后一个元素,则执行出队操作。最后将nums[j]插入队列尾部。代码:class Solution {原创 2021-07-22 04:16:34 · 54 阅读 · 0 评论 -
剑指offer 2021/7/20
30. 包含min函数的栈借助辅助栈代码:class MinStack { LinkedList<Integer> A,B; /** initialize your data structure here. */ public MinStack() { A = new LinkedList<>(); B = new LinkedList<>(); } public void push原创 2021-07-21 01:37:03 · 52 阅读 · 0 评论 -
剑指offer 2021/7/19
48. 最长不含重复字符的子字符串算法思想法一:动态规划+哈希表class Solution { public int lengthOfLongestSubstring(String s) { if(s.length() == 0){ return 0; } HashMap<Character, Integer> map = new HashMap<>(); int[] dp =原创 2021-07-20 02:21:47 · 44 阅读 · 0 评论 -
Java多线程
Java多线程1.并发与并行1.并发:指两个或多个事件在同一个时间段发生。(交替执行)2.并行:指两个或多个事件在同一时刻发生。(同时执行)2.线程与进程1.进程:是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程;进程也是程序的一次执行过程,是系统运行程序的基本单位;系统运行一个程序即是一个进程从创建、运行到消亡的过程。2.线程:线程是进程中的一个执行单元,负责程序的执行,一个进程中至少有一个线程。一个进程中是可以有多个线程的,这个应用程序也可以称之原创 2021-07-19 04:31:56 · 213 阅读 · 0 评论 -
剑指offer 2021/7/17
07. 重建二叉树代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { int[] preorder; HashMap<Integer, Intege原创 2021-07-18 03:18:22 · 43 阅读 · 0 评论 -
剑指offer 2021/7/16
09. 用两个栈实现队列代码:class CQueue { LinkedList<Integer> A, B; public CQueue() { A = new LinkedList<>(); B = new LinkedList<>(); } public void appendTail(int value) { A.push(value); } p原创 2021-07-17 01:51:10 · 64 阅读 · 0 评论 -
Java常用类
Java常用类1.Random类用来生成随机数字。1.导包import java.util.Random2.创建Random r = new Random();3.使用nextInt(int n) 参数代表范围,左闭右开空间2.ArrayList类基本信息1.数组的长度不可以发生改变,但是ArrayList集合的长度是可以随意变化的。2.对于ArrayList来说,有一个尖括号代表泛型。泛型:也就是装在集合中的所有元素,全都是统一的什么类型。注意:泛型只能是引用类型,不能是基本类原创 2021-07-16 23:51:40 · 91 阅读 · 0 评论 -
剑指offer 2021/7/15
42. 连续子数组的最大和算法思想:令dp[i]为以nums[i]为结尾的连续子数组最大和,dp[0]=nums[0];如果dp[i-1]>0,dp[i]=dp[i-1]+nums[i];否则,dp[i]=nums[i]。输出dp数组中最大的元素。class Solution { public int maxSubArray(int[] nums) { int[] dp = new int[nums.length]; dp[0] = nums[0];原创 2021-07-16 02:00:06 · 57 阅读 · 0 评论 -
剑指offer 2021/7/14
22. 链表中倒数第k个节点代码:/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public ListNode getKthFromEnd(ListNode head, int k) { in原创 2021-07-15 12:19:15 · 58 阅读 · 0 评论 -
剑指offer 2021/7/13
11. 旋转数组的最小数字算法思想:使用二分法进行查找。将数组看作左右两个数组,设置两个指针i,j分别指向数组首尾,若n[mid]>n[j],说明mid在左边数组中,令i=mid+1;若n[mid]<n[j],说明mid在右边数组中,令j=mid;若n[mid]=n[j],无法判断mid在哪边数组,j–减少区间范围。详细题解(关于为什么不和i进行比较/j–的正确性证明)代码:class Solution { public int minArray(int[] numbers)原创 2021-07-14 03:52:03 · 45 阅读 · 0 评论 -
剑指offer 2021/7/12
10- II 青蛙跳台阶问题代码:简单的动态规划问题。class Solution { public int numWays(int n) { int[] count = new int[n+1]; if(n == 0 || n == 1){ return 1; } count[0] = 1; count[1] = 1; for(int i = 2; i < n+1 ;原创 2021-07-13 01:12:15 · 60 阅读 · 0 评论 -
剑指offer 2021/7/11
05替换空格代码:class Solution { public String replaceSpace(String s) { char[] chars=s.toCharArray(); String result=""; for(int i=0;i<chars.length;++i){ if(chars[i]==' '){ result+="%20"; }el原创 2021-07-12 01:16:14 · 57 阅读 · 0 评论 -
剑指offer 2021/7/10
10 斐波那契数列代码:class Solution { public int fib(int n) { if(n==0){ return 0; } if(n==1){ return 1; } int[] f=new int[n+1]; f[0]=0; f[1]=1; for(int i=2;i<n+1;++i){原创 2021-07-11 00:30:09 · 54 阅读 · 0 评论 -
java基础
java基础编译型和解释型编译型: 将源代码一次性编译成可执行文件,不需要每次执行时重新编译。解释型: 每次执行时都需要对源代码进行逐行解释。java是两者结合。进制八进制数字前加0十六进制数字前加1x类型转换byte,short,char->int->long->float->double强制转换:(类型)变量名 高->低自动转换: 低->高注:1.不能对布尔值进行转换。2.不能把对象类型转换为不相干的类型。3.转换的时候可能存在内存溢原创 2021-06-13 00:18:12 · 112 阅读 · 1 评论