Java基础知识
小李小李彬彬有礼
记录自己学习的一点一滴
展开
-
【转载】Java中两个Long对象如何比较是否相等
https://blog.csdn.net/zjl_pcw/article/details/79969183转载 2020-04-07 15:43:11 · 452 阅读 · 0 评论 -
List实现按某属性首字母排序
import java.text.Collator;import java.util.*;/** * @author Peacock__ * @version 1.0 * @date 2020/3/10 14:03 */public class TempTest { public static void main(String[] args) { Lis...原创 2020-03-10 14:12:33 · 1804 阅读 · 0 评论 -
结束线程的几种方式
我们知道Thread.stop方法已经被标记为过时方法了,因为使用stop会有很大一些问题。那么除了stop方法,我们还能用以下方法来实现结束线程功能1、维护一个线程是否结束的flag2、使用interrupt3、定义守护线程维护一个线程是否结束的flagpackage com.thread.demo;import java.util.concurrent.TimeUni...原创 2019-04-29 15:40:35 · 666 阅读 · 0 评论 -
sleep()与wait()的区别
1、sleep是Thread类的方法,wait是Object类的方法2、sleep不需要唤醒,wait需要唤醒3、sleep不会释放对象锁,wait会释放对象锁4、sleep不依赖monitor对象,而wait依赖monitor对象我觉得第1、2项没什么需要额外解释的了,我们通过代码验证一下第3、4项吧sleep不会释放对象锁,wait会释放对象锁1.sleep()...原创 2019-04-29 19:05:20 · 276 阅读 · 0 评论 -
模拟10个线程抓取数据,限制一次性最多有5个线程工作
package com.thread.demo.unit2;import java.util.ArrayList;import java.util.Arrays;import java.util.LinkedList;import java.util.List;/** * @Author: Peacock__ * @Date: 2019/5/5 15:27 */public...原创 2019-05-05 16:02:16 · 670 阅读 · 0 评论 -
HashMap学习——数据结构、存储格式、源码理解
数据结构+存储格式JDK8之前HashMap是利用数组+链表的形式以Entry<K,V>对象存储数据。Entry<K,V>中包含key,value,hash,next信息如下:static class Entry<K,V> implements Map.Entry<K,V> { final K key; V valu...原创 2019-07-16 18:32:33 · 949 阅读 · 0 评论 -
hashCode、为什么要同时重写Object的hashCode()和equals()方法
本想研究一下HashMap的实现原理,但是开篇先讲了散列函数hashCode(),于是呢........内容就转变了。hashCode是对象的哈希值,主要的作用是用来快速查找对象在哈希表中的位置,而不是内存地址。hashCode()是Java顶级对象Object中的九大方法之一,也就是说每个java对象都有自己的hashCode。通过源码可以看出hashCode()是native方法,也就...原创 2019-06-13 16:17:43 · 402 阅读 · 0 评论 -
Bootstrap Table后台分页(Java)
由于维护的功能模块数据量较大,所以尝试把前台分页改为后台分页,提升用户体验。首先,在table加载的时候就需要指定我们必需的参数,例如:从哪一条数据开始,一次查询多少条数据,还可以附加一些定制化的参数。让表格的查询带着参数访问后台,示例如下://初始化Table $table.bootstrapTable({ url: contextPath + "后台URL"...原创 2019-06-10 10:57:17 · 1435 阅读 · 0 评论 -
HashSet判断重复原理
这个知识点完全属于今天的意外收获\(≧▽≦)/首先会调用Object的hashCode方法判hashCode是否已经存在,如不存在则直接插入元素;如果已存在则调用Object对象的equals方法判断是否返回true,如果为true则说明元素已经存在,如为false则插入元素。注:图片是借鉴他人博客,我再上面添加了一些额外标记首先我们看HashSet的源码中add方法...原创 2019-06-13 17:55:51 · 1139 阅读 · 0 评论 -
Java无需解压直接读取ZIP压缩包里的文件及内容
最近在做的功能模块有遇到下载ZIP文件里的文件内容,一开始的想法是先通过代码执行解压,然后读取文件内容,但是感觉好麻烦,于是度了一下,发现可以无需解压直接读取,而且还是JDK提供给我们的工具。(((o(*゚▽゚*)o)))解决方案就是通过ZipInputStream来读取。ZipInputStream在JDK中的util包中,而我们平时用的FileInputStream等都是在io包中的。...原创 2019-06-21 11:52:34 · 25770 阅读 · 14 评论 -
排序算法(一)——冒泡排序原理及Java实现
冒泡排序原理:我觉得类似于拍集体照的时候老师指挥按大小个排队依次比较两个相邻的数组元素、满足交换条件就交换二者位置,不满足就继续向下比较。冒泡排序原理动态图(摘自网络)Demo代码//冒泡排序(正序)int[] arr = {3, 13, 11, 9, 8, 1, 6, 10};for (int i = 0; i < arr.length; i++) { ...原创 2019-07-10 17:50:05 · 426 阅读 · 0 评论 -
排序算法(二)——插入排序原理及Java实现
插入排序原理:我觉得类似于斗地主时给纸牌排序(正序举例)从第二个元素开始依次与前面的元素比较。若此元素(比较元素)比前一位(被比较元素)的元素大,则停止比较,用此元素的后一位作为比较元素进入下一次循环。若此元素(比较元素)比前一位(被比较元素)的元素小,则继续与前面第二位(被比较元素)比较,依次比较下去。直至此元素比被比较的元素大时停止继续比较,并将此元素插入到此时的被比较元素后面...原创 2019-07-11 10:36:15 · 215 阅读 · 0 评论 -
排序算法(三)——选择排序原理及Java实现
选择排序原理:从第一个元素(当前元素)开始,依次与其后面的元素比较,找到最小的元素,与当前元素位置互换;直至当前元素为最小元素的时候,排序完成选择排序原理动态图(摘自网络)Demo代码 //选择排序(正序) int[] arr = {3, 13, 11, 9, 8, 1, 6, 10}; for (int i = 0; i &l...原创 2019-07-11 12:09:31 · 247 阅读 · 0 评论 -
JVM内存分区、垃圾回收算法、垃圾回收器的整理记忆
JVM的内存主要分两大区域:线程独享区和线程共享区。线程独享区还可以细化三块,那就是程序计数器、虚拟机栈和本地方法栈。程序计数器其实就是存放我们当前线程所执行到的字节码的位置的一个标识,这各区域我们开发人员不会操作到,所以这个区域也没有内存溢出之类的情况。虚拟机栈就是为虚拟机中的java方法服务的,存放栈帧信息。栈帧信息中包含局部变量表和返回值地址等信息。每个方法在执行的时候都会创建栈帧,在方法执...原创 2019-07-12 11:40:47 · 309 阅读 · 0 评论 -
【转】深入理解Java并发之synchronized实现原理
大牛总结的很到位、受益匪浅,感兴趣的小伙伴一起学习!!!!博客链接:https://blog.csdn.net/javazejian/article/details/72828483转载 2019-04-29 11:01:45 · 217 阅读 · 0 评论 -
Java读写json格式文件
存下来备用 /** * 读取json文件 */ public static String readFile(String path) { BufferedReader reader = null; String laststr = ""; try { /** 通过路径获取流文件(注:这种形式能够确保在以jar包形式运行时也可...原创 2018-11-15 10:26:02 · 2951 阅读 · 0 评论 -
浅谈bit,Byte
bit(位:一位二进制位)通常缩写为b(小写)Mbps(MilionBit per second)百万位每秒Kbps(Kilobit per second)千位每秒bps(bit per second)位每秒bps指每秒钟传输的二进制位数1Mbps = 1000Kbps = 1000000 bpsByte(字节)通常缩写为B(大写),一个Byte由8 bits 所组成M...原创 2018-12-14 11:24:09 · 342 阅读 · 0 评论 -
Java中i++与++i区别
i++与++i都是Java中的算数运算符,表示自增(操作数的值增加1)i++:先进行表达式运算(例如:赋值),再自增++i:先自增,再进行表达式运算(例如:赋值)先写个测试方法吧答案是m为0,n为5,控制台输出如图:小白本人的理解如下图文字描述: ...原创 2019-01-09 10:45:53 · 868 阅读 · 0 评论 -
Java中将InputStream读取为String, 各种方法的性能对比
转载地址:https://www.cnblogs.com/milton/p/6366916.html转载 2019-01-09 14:31:21 · 217 阅读 · 0 评论 -
Java之递归算法的理解与Demo(包含return的坑)
在平时的工作或者面试中,大家一说到“递归”,我们会想到“自己调自己”,确实,程序调用自身的编程技巧称为递归(recursion)。但是在真正编写递归程序的时候一定要具备三个条件:1.终结条件(满足边界条件时,停止调用自身)2.递归条件(满足递归条件时,继续调用自身)3.基本值(例如:下面demo中基本值就是最后一次调用自身时current的值)public static void...原创 2019-03-01 18:35:07 · 3522 阅读 · 0 评论 -
Java发送邮件
1.Pom中引入相关包<!-- start java 提供的支持邮件发送相关业务的类 --><dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.7</ver...原创 2019-03-04 16:15:07 · 452 阅读 · 0 评论 -
String的intern()方法
Demo测试:测试结果:查看intern()方法发现此方法是native方法(Native Method就是一个java调用非java代码的接口。一个Native Method是这样一个java的方法:定义被native关键字修饰的接口,该接口的实现由非java语言实现)...原创 2019-03-20 18:05:04 · 227 阅读 · 0 评论 -
Java成员变量,局部变量,全局变量
成员变量就是全局变量,也就是类变量,有默认值,存在堆区。局部变量无默认值,存在栈区。原创 2019-04-01 16:27:09 · 487 阅读 · 0 评论 -
死锁
当线程进入对象的synchronized代码块时,就持有了对象的锁,直到线程执行完此代码块,或调用了wait方法才会释放资源。在持有锁的期间,其他线程不能进入该代码块。当线程相互持有对方所需要的资源时,双方均处于等待对方释放资源的状态,如果双方都不主动释放资源,那么就会出现死锁。用代码说话上图中主函数执行的时候会出现死锁现象,因为当第一个线程(简称T1)进入run()方法后,进入...原创 2019-04-02 15:47:08 · 173 阅读 · 0 评论 -
synchronized关键字实现原理
上篇文章中已经学习了synchronized关键字的作用,以及使用方式,这篇来学习一下synchronized的底层实现原理。首先需要知道,synchronized对象锁的指针指向的是一个monitor对象(ObjectMonitor由C++实现的),每个对象都有对应的monitor,对象的monitor随对象的创建而创建,或随线程获取对象锁而创建,随销毁而销毁。我们需要关注的是ObjectM...原创 2019-04-28 17:42:51 · 262 阅读 · 0 评论 -
volatile关键字以及原理
volatile是在并发编程中保证共享数据一致性的常用关键字,同时也能保证多线程中共享数据的可见性、指令的有序性。我们知道,每个线程在执行时,都有自己独立的工作内存,用于存放线程执行时涉及到的一些变量,这些变量其实都是主存中相关变量的副本,在线程执行完毕后更新变量的值到主内存中。如果多个线程之间变量需要共享那么只能通过主内存来实现。例如A、B两个线程在执行的时候都涉及到了X变量,那么A...原创 2019-12-26 14:43:56 · 189 阅读 · 0 评论 -
Thread中yield、join、sleep(0)区别
Thread.yield会让当前线程让出持有的锁,让包含自己在内的其他线程去争抢锁,自己依然有抢到锁的可能性。Thread.join会让调用当前线程的线程处于阻塞状态,直至当前线程执行完毕。Thread.sleep(0)只是短暂的休眠,并不会让出锁,依然是锁的持有者。...原创 2019-04-29 10:55:05 · 843 阅读 · 1 评论 -
Java中equals与==的使用
平时开发代码中做比较的地方,有些时候equals()方法和==用的不太恰当,所以今天抽空研究了一下首先上测试图①直接定义String类型变量a,b,都赋值为a②直接定义String类型对象c,d,都赋值为a比较二者之前是否相等,一开始觉得图中②应该为false,但是执行后发现竟然为true,原因如下图: 结论:①判断值是否相等用equals()(除基本数据类型:...原创 2018-07-31 21:37:58 · 1118 阅读 · 0 评论