java
Android研发曹新雨
莫等闲,白了少年头,空悲切
展开
-
Java 四种引用以及作用
zuoweihttps://www.cnblogs.com/fengbs/p/7019687.html原创 2022-04-20 15:00:00 · 258 阅读 · 0 评论 -
Java8 Stream 使用
private static void test1() { List<Integer> integers = Arrays.asList(1, 2, 3, 4, 5); List<Integer> collect = integers.stream().skip(1).collect(Collectors.toList()); collect.forEach(System.out::println); //打印...原创 2022-04-02 23:02:19 · 830 阅读 · 0 评论 -
RxJava zip 使用
间隔发送: String[] codes = irCodeStr.split("\\|"); Observable<String> codesDate = Observable.fromArray(codes); Observable<Long> intervalDate = Observable.interval(interval, TimeUnit.MILLISECONDS);原创 2022-03-29 14:14:57 · 1592 阅读 · 0 评论 -
算法----实现strStr 函数
题目实现 strStr() 函数。给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。说明:当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java 的 indexOf() 定义相符。示例 1:输入:haystack = “he原创 2021-08-04 13:52:04 · 222 阅读 · 0 评论 -
Java byte 踩坑基础
ByteUtil.ByteArrToHex(new byte[]{(byte) 0b10101010})String.format("%02x", new Object[]{-56})https://www.cnblogs.com/zl181015/p/9435035.html原创 2021-08-03 20:15:14 · 1845 阅读 · 3 评论 -
Java Thead.interrupt 方法没有使线程停止工作
有问题的interruptpackage com.xinyu.test;public class TestInterrupt { public static void main(String[] args) { TestThread testThread = new TestThread(); testThread.start(); try { Thread.sleep(2000); } catch (In原创 2021-08-03 19:41:10 · 863 阅读 · 0 评论 -
算法-----前 k 个出现次数最多的单词
题目给一非空的单词列表,返回前 k 个出现次数最多的单词。返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,按字母顺序排序。示例 1:输入: ["i", "love", "leetcode", "i", "love", "coding"], k = 2输出: ["i", "love"]解析: "i" 和 "love" 为出现次数最多的两个单词,均为2次。 注意,按字母顺序 "i" 在 "love" 之前。示例 2:输入: ["the", "day", "is"原创 2021-07-13 14:49:35 · 600 阅读 · 0 评论 -
算法---给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合
题目给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例 1:输入:digits = "23"输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]示例 2:输入:digits = ""输出:[]示例 3:输入:digits = "2"输出:["a","b","c"] 提示:0 <= digits.l原创 2021-07-08 16:24:06 · 4079 阅读 · 0 评论 -
算法----返回Excel相应的列序号
题目:给定一个Excel表格中的列名称,返回其相应的列序号。例如, A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> 27 AB -> 28 ...示例 1:输入: "A"输出: 1示例 2:输入: "AB"输出: 28示例 3:输入: "ZY"输出: 701实现: public static int titleToNumber(St原创 2021-07-07 18:15:34 · 1024 阅读 · 0 评论 -
List遍历过程中删除数据
有问题的写法: private static void remove() { List<Integer> list = new ArrayList<>(); for (int i = 0; i < 10; i++) { list.add(i); } int size = list.size(); for (int i = 0; i < size; i++)原创 2021-07-06 14:46:10 · 517 阅读 · 0 评论 -
LinkedList 使用巩固及图解
LinkedList代码package com.xinyu.test;import java.util.LinkedList;/** * Created by zy on 2020/4/4. */public class LinkedListTest { public static void main(String[] args) { useAsQueue(); useAsStack(); } /** * 先进先出原创 2021-07-01 20:09:09 · 295 阅读 · 0 评论 -
算法--- 二叉树的层序遍历 II
题目 二叉树的层序遍历 II给定一个二叉树,返回其节点值自底向上的层序遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其自底向上的层序遍历为:[ [15,7], [9,20], [3]]思路使用层序遍历,后续便利的使用LinkedList addFirst() 方法把后面的遍历加在最前面即可。解决方法原创 2021-07-01 19:19:53 · 183 阅读 · 0 评论 -
算法----打印二叉树最右侧的节点 Java版
思路:首先进行层序遍历,拿到每一层的节点,然后打印每一层的最后一个节点即可。代码:package com.xinyu.test;import java.util.*;public class TreeTest3 { public static void main(String[] args) { } public List<List<Integer>> levelOrder(TreeNode root) { List<L原创 2021-07-01 17:40:20 · 481 阅读 · 0 评论 -
Java 类不可被继承的几种方法
1.final 修饰符public final class NoModifer { //没有修饰符 默认为包内可见 int age = 10; public NoModifer(){ }}public class Nomodifer2 extends NoModifer{}最常用的,被final 修饰符修饰的类,不可以被继承2.private 构造方法package com.xinyu.test.java.Test;public class原创 2021-06-30 13:45:12 · 5874 阅读 · 0 评论 -
面试---如何在List<Integer>中如何存放String类型的数据?
一般情况下:package com.xinyu.test;import com.sun.org.apache.xpath.internal.operations.String;import java.util.ArrayList;import java.util.List;public class TestListAddString { public static void main(String[] args) { List<Integer> list原创 2021-06-25 21:34:41 · 620 阅读 · 0 评论 -
ArrayList 和 LinkedList 源码解析
LinkedList private static class Node<E> { E item; Node<E> next; Node<E> prev; Node(Node<E> prev, E element, Node<E> next) { this.item = element; this.next = next;原创 2021-06-16 19:24:22 · 154 阅读 · 0 评论 -
深copy 和 浅copy 解析
浅copy 对于引用类型(数组、类对象),copy 的是引用,这就会导致如果你修改copy 过来的对象进行修改,就会影响原来的对象。深copy 就是把所有的引用对象都实现 cloneable 方法,并重新clone 方法,將所有的引用类型都重现创建一份,然后赋值。这样修改copy 的对象,就不会影响原来的。参考:https://www.jianshu.com/p/94dbef2de298...原创 2021-05-25 17:05:02 · 199 阅读 · 0 评论 -
六大设计原则
https://zhuanlan.zhihu.com/p/110130347原创 2021-05-24 10:42:46 · 116 阅读 · 0 评论 -
Java TreeMap 和 TreeSet 源码解析
A Red-Black tree based {@link NavigableMap} implementation.The map is sorted according to the {@linkplain Comparable naturalordering} of its keys, or by a {@link Comparator} provided at mapcreation time, depending on which constructor is used.TreeMap原创 2021-05-19 20:27:33 · 155 阅读 · 1 评论 -
LockSupport 使用
使用:package com.xinyu.test;import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.LockSupport;public class LockSupportTest { public static void main(String[] args) { Thread thread = Thread.currentThread(); new Threa原创 2021-05-07 23:17:47 · 230 阅读 · 0 评论 -
算法---字符串去重
字符串去重String text = “GHEXADDBSOIJEHDNABLFJSQZXXAA”对以上字符串进行去重,并保证字符串内字母的前后顺序不变,例如:“BBAABC"输出结果为"BAC”public String main(String text) {char[] str = text.toArray();int size = str.length();char[] result = new char[size]; char cur = str[0];result[0] = cur原创 2021-04-29 22:10:44 · 390 阅读 · 0 评论 -
算法--两数相加
String A=“456786329172849...“String B=”8747389394974390...“两个字符串长度超过Long ,两个字符的长度可能不相等,不能使用现有的计算大数相加的类,例如:BigDecimal。计算A+B,输出String。例如:"12" + "1" = "13"public String getSum(String s1, String s2) { int offset = 'A';char[] s1Array = s1.toArray();原创 2021-04-29 21:56:53 · 460 阅读 · 0 评论 -
Java CAS AtomicInteger使用
有问题的:import java.util.concurrent.CountDownLatch;public class AtomicIntegerTest { public int count; public static void main(String[] args) throws InterruptedException { AtomicIntegerTest atomicIntegerTest = new AtomicIntegerTest();原创 2021-02-04 21:33:01 · 187 阅读 · 0 评论 -
线程池实现原理
原理,而不只是原创 2021-02-03 14:01:09 · 206 阅读 · 0 评论 -
LinkedBlockingQueue 解析
LinkedBlockingQueue 类的作用:首先有三个关键字:1.Linked2.Blocking3.Queue1.首先是一个队列。2.是一个阻塞队列。3.由链表实现。作用:当你放一个元素的时候,当LinkedBlockingQueue 已经满了,如果调用put方法,那么你存放的线程就会阻塞,直到其他线程从队列中取出元素,这时候你就可以放进队列。但是如果调用offer方法,那么offer方法直接会返回false.不会阻塞线程。当你取一个元素的时候,如果队列是空的,那么会阻塞当前线程原创 2020-12-04 21:34:19 · 1078 阅读 · 0 评论 -
Java 冒泡排序 以及 下沉排序
package com.xinyu.test.java.sort;import java.lang.reflect.Array;import java.util.Arrays;public class BubbleSort { public static void main(String[] args) { int[] ints = {10, 2, 7, 3, 9, 5, 20,1};// int[] ints = {10, 2, 7};//原创 2020-08-18 18:42:39 · 704 阅读 · 0 评论 -
LinkedHashMap 源码解析
LinkedHashMap 是什么?LinkedHashMap 本质上是一个Map,和 HasMap 的区别是,HasMap 的 存储是没有顺序的,LinkedHashMap 是按照存贮顺序存贮的,而且可以根据访问顺序,动态的去调整存储顺序。比如最常访问的放到最后,最不常访问的放在最前面。这个属性被用到了LRU 算法里面。怎么实现的存放有顺序?首先,LinkedHashMap 继承自HashMap, 重写了HasMap的 NewNode方法。java.util.LinkedHashMap#newNo原创 2020-08-12 23:14:27 · 212 阅读 · 0 评论 -
算法-----------接雨水(Java版本)
题目给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。思路及解决方法 static class Solution { public int trap(int[] height) { /** * 左右两边 积水的高度取决于短的一端 如果左边的低 那么我们就从左边开始遍历 默认左边最大的值为最左边的值 如原创 2020-07-28 21:06:58 · 480 阅读 · 0 评论 -
算法---------简化路径(Java版本)
题目以 Unix 风格给出一个文件的绝对路径,你需要简化它。或者换句话说,将其转换为规范路径。在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (..) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。更多信息请参阅:Linux / Unix中的绝对路径 vs 相对路径请注意,返回的规范路径必须始终以斜杠 / 开头,并且两个目录名之间必须只有一个斜杠 /。最后一个目录名(如果存在)不能以 / 结尾。此外,规范路径必须是表示绝对路径的最短字符串。原创 2020-07-17 20:14:37 · 342 阅读 · 0 评论 -
算法--------翻转字符串里的单词(Java版本)
题目:给定一个字符串,逐个翻转字符串中的每个单词。 示例 1:输入: "the sky is blue"输出: "blue is sky the"示例 2:输入: " hello world! "输出: "world! hello"解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。示例 3:输入: "a good example"输出: "example good a"解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一原创 2020-07-15 09:52:44 · 310 阅读 · 0 评论 -
Java String split 使用详解、split 方法存在的一些坑
String 方法的split 其实是很有学问的,他有很多的特殊情况。我们来梳理一下: 1.如果字符串最前面有匹配的字符串 则返回的字符串数组 第一个为空 System.out.println(Arrays.toString("-1".split("-"))); [, 1] 2.如果limit 为 0 ,后续分割的字符串长度小于0,那么后续的字符串就不会继续返回 System.out.println(Arrays原创 2020-07-14 20:27:01 · 1117 阅读 · 0 评论 -
算法----------字符串相乘(Java 版本)
题目给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。示例 1:输入: num1 = "2", num2 = "3"输出: "6"示例 2:输入: num1 = "123", num2 = "456"输出: "56088"说明:num1 和 num2 的长度小于110。num1 和 num2 只包含数字 0-9。num1 和 num2 均不以零开头,除非是数字 0 本身。不能使用任何标准库的大数类型原创 2020-07-10 20:29:11 · 295 阅读 · 0 评论 -
算法----------字符串的排列(Java版本)
题目给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。换句话说,第一个字符串的排列之一是第二个字符串的子串。示例1:输入: s1 = "ab" s2 = "eidbaooo"输出: True解释: s2 包含 s1 的排列之一 ("ba"). 示例2:输入: s1= "ab" s2 = "eidboaoo"输出: False 注意:输入的字符串只包含小写字母两个字符串的长度都在 [1, 10,000] 之间解决方法 //原创 2020-07-07 10:12:48 · 224 阅读 · 0 评论 -
回溯算法-----复原IP地址(Java版本)
题目给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。有效的 IP 地址正好由四个整数(每个整数位于 0 到 255 之间组成),整数之间用 '.' 分隔。 示例:输入: "25525511135"输出: ["255.255.11.135", "255.255.111.35"]解决方法 //回溯用 LinkedList<String> linkedList = new LinkedList<>(); //保存结果用原创 2020-07-02 21:34:49 · 386 阅读 · 0 评论 -
算法-------LIS算法(Java版本)
题目LIS(Longest Increasing Subsequence)最长上升(不下降)子序列解决方法:方法一: public int lengthOfLIS(int[] nums) { int[] dp = new int[nums.length]; int len = 0; for (int num : nums) { int i = Arrays.binarySearch(dp, 0, len, num);原创 2020-06-29 15:43:15 · 451 阅读 · 0 评论 -
算法--------俄罗斯套娃信封问题(Java版本)
题目给定一些标记了宽度和高度的信封,宽度和高度以整数对形式 (w, h) 出现。当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样。请计算最多能有多少个信封能组成一组“俄罗斯套娃”信封(即可以把一个信封放到另一个信封里面)。说明:不允许旋转信封。示例:输入: envelopes = [[5,4],[6,4],[6,7],[2,3]]输出: 3 解释: 最多信封的个数为 3, 组合为: [2,3] => [5,4] => [6,原创 2020-06-29 15:30:12 · 425 阅读 · 0 评论 -
算法-------三角形最小路径和(Java版本)
题目给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。 例如,给定三角形:[ [2], [3,4], [6,5,7], [4,1,8,3]]自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。解决方法class Solution { public int minimumTotal(List&原创 2020-06-28 14:32:15 · 388 阅读 · 0 评论 -
算法-----最大子序和(Java 版本)
题目给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。解决方法动态规划思路:对于给定数组nums,我们假设dp[i] 表示 数组中第i个位置的最大和,那么有 f(i) = f(i-1) > 0 ? f(i-1)原创 2020-06-26 19:01:56 · 249 阅读 · 0 评论 -
算法-----买卖股票的最佳时机(Java 版本)
题目给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。 示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股原创 2020-06-26 18:06:01 · 620 阅读 · 0 评论 -
算法--------最大正方形(Java版本)
题目在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。示例:输入: 1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0输出: 4解决方法动态规划:思路:定义dp[i][j]数组,dp[i][j]表示在matrix[i][j] 位置,能够形成正方形的最大边长。对于每一个matrix[i][j] ,如果matrix[i][j] 等于0,那么这个位置能形成的最大正方向就是0.如果matrix[i][j] 等于1,那么d原创 2020-06-26 17:31:34 · 614 阅读 · 0 评论