![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
tinyvampirepudge
这个作者很懒,什么都没留下…
展开
-
查看Java字节码内容的几种方式
1、javap通过javac和javap查看:先通过javac将.java文件编译成.class字节码文件,然后通过javap -verbose分析字节码。(base) tinytongtongdeMacBook-Pro% javac JVMRunTimeStorageTest.java(base) tinytongtongdeMacBook-Pro% javap -verbose JVMRunTimeStorageTest这样你就能看到你的字节码信息了。示例如下:Classfile /Use原创 2022-03-16 18:34:11 · 3221 阅读 · 0 评论 -
Android中对格式控制符的支持
1、String#format代码示例:Log.e("Tag", String.format("name:%s, hashCode:%h", "name", obj.hashCode()));更多细节请查看Formatter。2、Context#getString中支持格式控制符:代码示例:<string name="string_xxx">%1$s猫了个咪啊</string>String content = getContext().getString(R.str原创 2021-07-13 16:23:35 · 79 阅读 · 1 评论 -
使用特殊字符拼接字符串“+“
使用特殊字符拼接字符串"+"期望:使用"+"拼接多个字符串当做key,在需要时将key根据"+"进行拆分,获取到原来的多个字符串。正确用法:private static final String SPLIT = "+";①使用StringBuilder#append来拼接多个字符串和SPLIT;②解析字符串:String[] splits = key.split(Pattern.quote(SPLIT));有坑的用法一:写入的和读取出来的不一致。private static fin原创 2021-07-13 12:59:29 · 584 阅读 · 0 评论 -
记一次忽略@SuppressLint(“NewApi“)提示引发的血案
记一次忽略@SuppressLint(“NewApi”)提示引发的血案本次开发中用到了Java中的优先级队列,需要根据给定的优先级对元素进行排序,于是我写出了下面这段代码:private Comparator<CustomObject> comparator = new Comparator<CustomObject>() { @Override public int compare(CustomObject o1, CustomObject o2) {原创 2021-07-13 12:52:23 · 325 阅读 · 0 评论 -
避免list的并发修改异常的几种方式
避免list的并发修改异常的几种方式1、使用list的snapshot,遍历它的副本使用如下:com.bumptech.glide.manager.ActivityFragmentLifecycle#onStart()for (LifecycleListener lifecycleListener : Util.getSnapshot(lifecycleListeners)) { lifecycleListener.onStart();}具体实现如下:com.bumptech.glide原创 2021-07-13 12:42:57 · 359 阅读 · 0 评论 -
记一次java命令执行IDE中java类的入口函数的坑
熟悉java的同学都知道,我们可以直接通过java命令执行Java类的入口函数,执行时还可以携带参数,参数是以字符串数组的形式传递给main入口函数的。不过现在已经很少使用这种方式执行java代码了,都是通过IDE来执行。比如下面这个测试类,package com.tinytongtong.androidstudy.java.cachepool;public class JavaMainTest { public static void main(String[] args) {原创 2020-08-08 14:04:12 · 712 阅读 · 0 评论 -
Java中基本类型和包装类的各类比较(==),以及包装类的对象缓存池
Java中的基本类型及其包装类的比较(==)一直是一个比较头疼的问题,不仅有自动装箱和拆箱操作,部分的包装类还有对象缓存池,这就导致了这部分知识容易混淆。对于==操作符来说,如果比较的数据是基本类型,则比较它们的值,如果比较的是对象,则会比较对象的内存地址。另外,如果一个是基本类型、一个是包装类型,在比较前会先把包装类型拆箱成基本类型,然后进行比较。以int为例,这里我们把参与比较的类型分为三种:int、直接new出来的Integer对象和自动装箱出来的Integer对象。这里先不考虑Integer的原创 2020-08-06 23:36:42 · 3312 阅读 · 5 评论 -
一文带你理解Java中自动装箱和拆箱
Java中自动装箱和拆箱装箱(Boxing),也称为包装(Wrapper),是在对象中放置原语类型(primitive type)的过程,以便原语(primitive)可以作为引用对象使用。这里的primitive type就是Java里面的基本类型,所有的基本类型都有一个与之对应的类。例如,Integer类对应基本类型int。通常,这些类称为包装器(wrapper)。这些对象包装器类拥有很明显的名字:Integer、Long、Float、Double、Short、Byte、Character、Voi原创 2020-08-04 23:20:07 · 2096 阅读 · 0 评论 -
java中整型数据(byte、short、int、long)溢出的现象及原理
我们都知道Java中基本数据类型中,整型的有byte、short、int、long,依次占用内存空间是1、2、4、8个字节,它们的取值范围如下:类型字节数取值范围byte1[-128,127]short2[-32768,32767]int4[-2147483648,2147483647]long8[-9223372036854775808,...原创 2020-05-04 21:02:26 · 4135 阅读 · 0 评论 -
正则表达式获取img的src内容
如果我们有如下一段数据,我们想获取img中src的内容。<p>桥边姑娘,我把你放心上</p><p><img src="https://n.sinaimg.cn/news/transform/20171113/puY7-fynship2141885.jpg" _src="https://n.sinaimg.cn/news/transform/2017111...原创 2020-03-08 22:26:32 · 3212 阅读 · 2 评论 -
正则表达式匹配html标签,获取标签内容
如何获取html中正文的内容假设我们要获取下面html标签中的内容:<p>桥边姑娘</p><p>你的芬芳</p><p>我把你放心上</p><p>不想让你流浪</p><p><span style="white-space: normal;">王者荣耀</span>...原创 2020-03-08 21:46:39 · 34863 阅读 · 5 评论 -
Java中实现异步转同步的几种方式
文章目录Java中实现异步转同步的几种方式1、CountDownLatch2、CyclicBarrier3、FutureTask①Callable + Future + ExecutorService②Callable + FutureTask + ExecutorService③Callable + FutureTask + Thread4、rxjavamap——让异步任务顺序执行①先创建四个B...原创 2019-05-25 01:29:51 · 13727 阅读 · 2 评论 -
Java compiler error: constant string too long
Java compiler error: constant string too long最近项目中遇到解析图片的base64字符串需求,在测试时遇到了error: constant string too long这个错误,代码如下:String base64 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZAAAAKoCAYAAABZ.....原创 2019-01-16 18:08:07 · 6023 阅读 · 0 评论 -
21.2基本的线程机制——Thing in java学习笔记
21.2 基本的线程机制并发编程使我们可以将程序分为多个分离的、独立运行的任务。通过使用多线程机制,这些独立人物(也被称为子任务)中的每一个都将由执行线程来驱动。一个线程就是在进程中的一个单一的顺序控制流,因此,单个进程可以拥有多个并发执行的任务。在使用线程时,CPU将轮流给每个任务分配其占用时间。线程的一大好处是可以使你从这个层次抽身出来,即diamante不必知道它是运行在具有一个还是...原创 2019-01-21 16:20:34 · 568 阅读 · 0 评论 -
LinkedHashMap源码简读
LinkedHashMap1、LinkedHashMap继承自HashMap,HashMap具有的特性它都具有。2、实际上,LinkedHashMap是通过双向链表和散列表这两种数据组合实现的。LinkedHashMap中的“Linked”实际上指的是双向链表,并非指“用链表法解决散列冲突”。3、LinkedHashMap不仅支持按照插入顺序遍历数据,还支持按照访问顺序来遍历数据。通过设置a...原创 2018-12-17 18:50:16 · 463 阅读 · 1 评论 -
HashMap 1.8 源码简读
HashMap 1.8 源码简读初始大小:默认为16/** * The default initial capacity - MUST be a power of two. */static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16如果指定了大小,则会在初始化的时候将初始容量大小设置为大于等于指定初始值、...原创 2018-12-14 15:26:01 · 537 阅读 · 1 评论 -
Android studio项目中的gradle.properties详解
Android studio项目中的gradle.properties详解在使用Android Studio新建Android项目之后,在项目根目录下会默认生成一个gradle.properties文件,我们可以在里面做一些Gradle文件的全局性的配置,也可以将比较私密的信息放在里面,防止泄露。下面我们就来分析下IDE自动生成的gradle.properties文件,及其常见的用法。gra...原创 2018-12-07 14:18:38 · 16138 阅读 · 0 评论 -
观察者模式实战——登录页面
观察者模式实战——登录页面Android开发中我们会遇到这样的需求,某个需要用户输入信息的页面,只有在用户输入了多条数据之后,下一步按钮才能可点击,用户才可以进行下一步操作。如下图所示,用户只有在同时输入了手机号和密码之后,登录按钮才可以点击,否则登录按钮不可点击。 这种需求在开发中很常见,当且仅当多个条件同时被满足,某个步骤才会执行。那么这个问题如何解决呢?第一眼看过去,这个是典型的观...原创 2018-11-30 15:31:52 · 1352 阅读 · 4 评论 -
enum和switch case结合使用
在将enum和switch case结合使用的过程中,遇到了这个错误:“An enum switch case label must be the unqualified name of an enumeration constant”,代码如下所示:public enum EnumType { type1("type1"), type2("type2"), type3("type...原创 2018-05-14 15:02:29 · 13945 阅读 · 2 评论 -
kotlin查看编译后的Java代码
mac版Android Studio 1、打开一个.kt文件 2、在Android Studio上方,操作如下 Tools –&amp;gt; Kotlin –&amp;gt; Show Kotlin ByteCodes 如下图: 3、在kotlin字节码页面中,我们点击左上角的decompile按钮,就可以看到Java代码了,如下图所示:...原创 2018-08-13 10:10:11 · 8924 阅读 · 0 评论 -
普通内部类持有外部类引用的原理
普通内部类持有外部类引用的原理 内部类虽然和外部类写在同一个文件中, 但是编译完成后, 还是生成各自的class文件,内部类通过this访问外部类的成员。1、编译器自动为内部类添加一个成员变量, 这个成员变量的类型和外部类的类型相同, 这个成员变量就是指向外部类对象(this)的引用;2、编译器自动为内部类的构造方法添加一个参数, 参数的类型是外部类的类型, 在构造方法内部使用...原创 2018-08-18 15:54:21 · 3985 阅读 · 0 评论 -
Java代码实现顺序栈和链式栈
Java代码实现顺序栈和链式栈栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入或者删除运算。后进先出(Last In First Out)。栈中的数据操作主要有push(压入)和pop(弹出)操作。实际上,栈就可以用数组来实现,也可以用链表来实现。用数组实现的叫做顺序栈,用链表实现的叫做链式栈。为了简单起见,我们的栈不支持泛型。顺序栈public c...原创 2018-10-29 14:53:09 · 2608 阅读 · 0 评论 -
Java实现队列——顺序队列、链式队列
Java实现队列——顺序队列、链式队列概念先进者先出,这就是典型的“队列”。(First In, First Out,FIFO)。我们知道,栈只支持两个基本操作:入栈push()和出栈pop()。队列跟栈非常相似,支持的操作也很有限,最基本的操作也是两个:入队和出队。入队 enqueue(),让一个数据到队列尾部;出队 dequeue(),从队列头部取一个元素。所以,队列跟栈一样,也是一...原创 2018-10-29 17:17:23 · 7282 阅读 · 3 评论 -
Java数组实现循环队列
Java数组实现循环队列上一节(Java实现队列——顺序队列、链式队列)我们使用数组实现了顺序队列,但是在tail == n时会有数据搬移操作,这样入队操作性能就会受到影响。这里我们使用循环队列的解决思路。循环队列顾名思义,首尾相连就形成了循环队列,如下图所示:实现循环队列最关键的部分是确定队列何时为空何时满。在用数组实现的非循环队列中,队满的判断条件是tail == n,队空的判断条件...原创 2018-10-29 20:55:01 · 4493 阅读 · 3 评论 -
使用Java实现单向链表,并完成链表反转。
使用Java实现单向链表,并完成链表反转。算法和数据结构是程序员逃不过的一个坎,所以趁着闲余时间,开始学习基础的算法和数据结构。这里记录下自己实现简单的单项链表的过程,如有错误,敬请指正。明确需求在Java中,常用的数据容器里面,跟链表关系紧密的当属LinkedList了,它的底层实现为双向链表,这里就以它为参照物,实现自己的简单的单向链表。另外,还需要支持增删改查、获取大小等功能。如下所...原创 2018-10-26 21:30:07 · 2568 阅读 · 2 评论 -
Java实现有环的单向链表,并判断单向链表是否有环
有一个单向链表,链表当中有可能出现环,就像下图这样。我们如何判断一个单向链表是否有环呢?那么第一步,我们先实现一个这样的链表,接着再说如何判断这样的链表。实现有环的单向链表1、定义add(Node node)方法 /** * 向链表末尾添加结点 * * @param node 结点的next指向为null,表示尾结点。 * @return ...原创 2018-10-27 14:23:49 · 1434 阅读 · 0 评论 -
Java实现两个有序的链表合并
Java实现两个有序的链表合并先实现两个有序链表代码如下: SingleLinkedList sll1 = new SingleLinkedList(); for (int i = 0; i < 10; i += 2) { SingleNode node = new SingleNode(i, null); ...原创 2018-10-27 15:11:03 · 2821 阅读 · 2 评论 -
删除链表倒数第 n 个结点
Java代码实现:删除链表倒数第 n 个结点问题描述:给你一个单向链表,删除链表倒数第n个结点,然后返回head结点。这里的数字n是有效数字。Given linked list: 1->2->3->4->5, and n = 2.移除倒数第二个结点之后: 1->2->3->5.方法一:先遍历获取链表长度,接着获取要移除的前一个元素,修改该元素...原创 2018-10-27 17:15:50 · 734 阅读 · 0 评论 -
求单向链表的中间结点
求单向链表的中间结点需求非空的单向链表,返回其中间节点。如果有两个中间结点,返回第二个。链表大小控制在1~100之间。示例1:Input: [1,2,3,4,5]Output: Node 3 from this list (Serialization: [3,4,5])示例2:Input: [1,2,3,4,5,6]Output: Node 4 from this list (...原创 2018-10-27 17:57:38 · 1095 阅读 · 0 评论 -
冒泡排序、插入排序、选择排序
冒泡排序、插入排序、选择排序冒泡排序(Bubble Sort)冒泡排序只会操作相邻的两个数据。两两比较,将较大的数换到后边。代码如下: /** * 冒泡排序 * 两两比较,将较大的数移到后边。 * * @param a * @param n */ public void bubbleSort(int[] a, int...原创 2018-11-01 20:07:51 · 441 阅读 · 0 评论 -
Java代码实现归并排序
Java代码实现归并排序归并排序(Merge Sort)思路:如果要排序一个数组,我们先把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并在一起,这样整个数组就都有序了。所以说归并排序的核心思想是排序和合并两个有序数组,这个规程需要用递归来实现。核心思想:将数组拆分为两个数组,然后对两个数组各自进行排序。合并两个排好序的数组。需要注意的是,对子数组进行排...原创 2018-11-13 17:46:52 · 2058 阅读 · 0 评论 -
Java代码实现快速排序(QuickSort)
Java代码实现快速排序(QuickSort)核心思想如果要排序数组中下标从p到r之间的一组数据,我们选择p到r之间的任意一个数据为pivot(分区点)。我们遍历p到r之间的数据,将小于pivot的放到左边,将大于pivot的放到右边,将pivot放到中间。经过这一步骤之后,数组p到r之间的数据就被分成了三个部分,前面p到q-1之间都是小于pivot的,中间是pivot,后面的q=1到r之间...原创 2018-11-14 09:27:45 · 2239 阅读 · 1 评论 -
Java实现二分查找
Java实现二分查找二分查找针对的是一个有序的数据集合,查找思想有点类似分治思想。每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为0。这里我们实现最简单情况下的二分查找。升序排列的数组,无重复元素,查找其中是否包含单个元素。非递归方式实现: /** * 二分查找,针对不存在重复元素的。非递归实现。 * * ...原创 2018-11-24 11:11:27 · 744 阅读 · 0 评论 -
成员变量初始化的问题
静态成员变量初始化静态管理类java原创 2017-03-16 22:46:16 · 1183 阅读 · 0 评论