
Java
文章平均质量分 59
基础语法、源码剖析、简单算法
强钦钦
心有猛虎,嗷呜嗷呜
展开
-
java正则表示式方法解析与示例
文章目录java.util.regex包介绍正则表达式语法实例及描述:代码示例1.Pattern.complie(String regex)2.Pattern.matches(String regex,CharSequence input)注意3.Pattern.matcher(CharSequence input)4.Matcher.matches()/ Matcher.lookingAt()/ Matcher.find()5.校验手机号资料java.util.regex包介绍是一个用正则表达式所订制原创 2022-03-23 23:50:23 · 8039 阅读 · 0 评论 -
在循环中 删除list中元素
文章目录遍历1、for循环2、foreach()3、iterator遍历总结:扩展: ArrayList源码remove()iterator()源码JAVA中循环遍历list有三种方式for循环、增强for循环(也就是常说的foreach循环)、iterator遍历。遍历1、for循环 for(int i=0;i<list.size();i++){ if(list.get(i).equals("del")) list.remove(i); }这种方式的问题在于原创 2021-09-26 22:28:00 · 2050 阅读 · 0 评论 -
Comparable和Comparator两种比较器的区别
文章目录Comparable接口Comparator接口区别:代码Comparable接口内比较器 ,位于包java.util自然排序(natural ordering)。compareTo方法也被称为自然比较方法。Comparable接口将比较代码嵌入自身类中。像Integer、String等这些基本类型的JAVA封装类都已经实现了Comparable接口,这些类对象本身就支持和自己比较,直接调用Collections.sort()就可以对集合中元素的排序,无需自己去实现Comparable接口原创 2021-08-19 20:56:14 · 311 阅读 · 4 评论 -
如何判断对象的类型(java)
文章目录instanceof注意:代码输出结果:getClass()注意:代码输出结果:相关链接想要判断一个对象是否是一个类的实例,有以下两种方法:instanceof注意:使用该关键字不仅可以判断对象是否是某个类的实例,甚至连该类继承的基类和实现的接口也都能够被识别为true。下图是Integer的继承关系图。Object i = new Integer(7);//注意不能定义成int类型,需要 定义成包装类Integer。代码 Object i = new Intege原创 2021-06-25 19:12:24 · 3648 阅读 · 1 评论 -
两个if 一个else,怎么匹配
if如果if中的条件满足,就可以执行if无论是否满足条件都会向下执行,直到程序结束双if是每一个if都会进行判断,互相之间不会影响;else if很特殊,既要满足是else,又要满足if条件即不是上一个条件的前提下,如果满足这个条件,就执行里面的操作。else if 满足一个条件就会停止执行。else总是与其前面最近的尚未配对的if结合注意:有多个if时,由于if都会执行一遍,则可能会进入到多个if中,出现未知错误,而else if就只能进入一次测试1:原创 2021-05-31 22:47:53 · 11589 阅读 · 1 评论 -
冒泡、选择、直接插入、归并、快速、堆排序的分析、实现与优化
文章目录冒泡排序图解代码选择排序图解代码直接插入排序图解代码归并排序图解代码快速排序(重要,不稳定)图示代码堆排序(重要 ,不稳定)概念图解代码冒泡排序图解代码import java.util.Arrays;/** * 冒泡排序(也叫下沉排序) * 从前往后,两两比较,大的往后走(像石头沉底),小的往前走(像气泡浮出水面) * 时间复杂度:O(N^2) (两层for循环) * 空间复杂度:O(1) (tmp) * 稳定性:稳定 * (1 2 1' 3 5 在排序前后1和原创 2021-05-19 00:25:32 · 500 阅读 · 0 评论 -
java遍历的几种方式
文章目录IteratorList遍历方式:第一种:第二种:第三种:第四种:IteratorhasNext():没有指针下移操作,只是判断是否存在下一个元素next():指针下移,返回该指针所指向的元素remove():删除当前指针所指向的元素,一般和next方法一起用,这时候的作用就是删除next方法返回的元素while(iterator.hasNext() { Object item = iterator.next(); iterator.remove();原创 2021-05-13 15:26:32 · 2107 阅读 · 1 评论 -
使用Idea2018和GitHub Desktop 上传代码到Github进行管理
【教程】使用GitHub Desktop管理你的项目_哔哩哔哩 (゜-゜)つロ 干杯~-bilibiliIDEA官方教程】分享一个项目到Github (2020)原创 2021-05-11 11:51:06 · 921 阅读 · 5 评论 -
idea在debug时如何从控制台输入数据
原创 2021-05-02 16:33:41 · 1621 阅读 · 0 评论 -
日期格式化
文章目录标记(区分大小写)日期格式化字符串转为日期标记(区分大小写)年yyyy月MM日dd时HH分mm秒ss毫秒SS日期格式化package com.tulun.program;import java.text.SimpleDateFormat;import java.util.Date;public class testDate { public static void main(String[] args) { //默认输出格式原创 2021-05-01 21:14:47 · 580 阅读 · 0 评论 -
idea常用快捷键以及自定义方法
常见的添加try/catch的快捷键:ctrl+alt+t自动生成函数:Alt+insert给提示:Alt+enter自动导包:Editor->general->auto import 全打勾introduce local variable快捷键: ctrl+alt+V (将自动创建一个对象和对象名)代码格式化:ctrl+shift+f删除一行:ctrl+d自定义file->settings->keymap可以选择用idea还是eclipse的快捷键,还可以自定义原创 2021-04-01 11:31:26 · 1890 阅读 · 0 评论 -
String和StringBuffer和StringBuilder的区别及使用
文章目录String类StringBufferStringBuilderStrings中的方法StringBuilder和String相互转换的方法参考资料:StringBuffer、StringBuilder和String一样,也用来代表字符串。String类是不可变类,任何对String的改变都 会引发新的String对象的生成;StringBuffer则是可变类,任何对它所指代的字符串的改变都不会产生新的对象。StringBuffer支持并发操作,线性安全的,适 合多线程中使用。Stri原创 2021-03-31 23:00:07 · 338 阅读 · 1 评论 -
如何使用IDEA学习java源码以及相关快捷键
文章目录如何学习源码:图形化操作:方法1.方法2.快捷键:1.打开大纲:2.查看类方法:3.查看类继承的关系图:4查看接口的实现类5 查看定义的变量在哪里被调用参考资料:如何学习源码:1.ctrl+左键进入源码2.看继承和实现的接口3.看import下的注释第一段话,会介绍特点4.看定义的属性,即成员变量,代表什么含义(上方注释的第一段话)。5.看重要的方法(如构造函数 put move resize)图形化操作:方法1.鼠标右键选Go To或Diagrams方法2.点击左下角原创 2021-03-31 22:27:46 · 661 阅读 · 0 评论 -
idea从File->open导入eclipse项目后无法查看源码
文章目录问题:解决方案:方法1:将src标记成Sources Root方法2:以Project from Existing Sources的形式打开步骤1:导入项目步骤2.配置SDK步骤3:设置编码方式(如果有乱码)扩展知识:1.在同一窗口新建多个工程项目2.重启IDEA3.Power Save Mode问题:在idea上使用File-》open导入eclispe项目后,代码中的库函数都不能跳转去看源码,写的时候也没有代码提示,源码文件夹也是灰色的解决方案:方法1:将src标记成Sources原创 2021-03-31 12:53:05 · 902 阅读 · 0 评论 -
eclipse打开多个控制台以及切换控制台程序
1.点击右边有加号的控制台,可以看见左边多了一个console2.点击蓝色控制台图标,可以指定每个控制台展示哪个程序的运行结果原创 2021-03-28 16:04:21 · 1714 阅读 · 0 评论 -
IDEA中配置OpenJDK8并查看native方法源码
Java源码中的native方法是不能直接在jdk中看到的,需要下载OpenJDK源码包下载链接:OpenJDK8配置步骤:1.打开Project Structure2.在SDKs中找Sourcespath那一栏添加刚才下载好的压缩包,并点击apply即可测试:打开源码工程你也可以把源码作为一个工程打开,查看所有源码,包括C++、C写的...原创 2021-03-28 00:17:32 · 4212 阅读 · 0 评论 -
idea安装hsdis
下载根据控制台报错提示,下载需要的包,放在jdk/jre/bin/server下hsdis-amd64.dllhsdis-i386.dll设置1.run->edit config->设置VM参数为:-server -Xcomp -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -XX:CompileCommand=compileonly2.指定jrePrintAssembly is disabled放入jre/lib下原创 2021-03-23 13:48:48 · 840 阅读 · 0 评论 -
IDEA中Ctrl+Shift+f格式化代码不生效
原因和微软拼音输入法切换繁体冲突解决方法1.进入时间和语言,选择首选语言(中文)2.进入微软拼音,修改按键里的热键替代方案:你可以在项目处右击,找reformat code选项原创 2021-03-23 11:55:08 · 886 阅读 · 0 评论 -
synchornized同步锁实现3个线程循环打印数字
线程状态转化图:题目synchornized同步锁实现3个线程循环打印数字, 使用线程1,打印1,2,3,4,5. 线程2,打印6,7,8,9,10. 线程3,打印11,12,13,14,15. 依次循环打印,直到打印至60 package thread;public class Synchronized_Print { //static 共用 public static int num = 1;//要打印的数字 public st原创 2021-03-22 23:22:51 · 217 阅读 · 1 评论 -
java创建临时文件的路径问题
创建临时文件使用 createTempFile()方法,有以下问题需要注意:源码public static File createTempFile(String fileName, String suffix, File parentFile)参数;fileName: 临时文件的名字, 生成后的文件名字将会是【fileName + 随机数】suffix: 文件后缀(格式),例如.txtparentFile:原创 2021-03-21 20:15:57 · 2961 阅读 · 0 评论 -
HashMap、LinkedHashMap、TreeMap之间的区别和联系(简要)
HashMap、LinkedHashMap、TreeMap之间的区别和联系HashMap:常用;根据键访问值,速度比较快;允许键为空、值为空;非线程安全(可使用ConcurrentHashMap或Collectoins.synchornizedxxx());遍历是无序的Collections 集合(Collection是基本接口)访问的工具类Collectoins.synchornizedxxx()可将非线程安全的list setmap转化成线程安全的集合,转化方式和Hashtable一样(syn原创 2021-03-03 11:35:44 · 678 阅读 · 1 评论 -
TreeMap的顺序
TreeMapMap(接口)(源码121行) 有HashMap(实现类 无序 空间换时间) 和 SortMap(接口)SortMap(接口)里有TreeMap可以按照自然顺序从小到大可以按照给定比较器的顺序代码测试:package collection;import java.util.Comparator;import java.util.Map;import java.util.TreeMap;class P{ protected String na原创 2021-03-03 11:34:24 · 789 阅读 · 0 评论 -
LinkedHashMap以及自己实现LRU缓存机制
文章目录LinkedHashMap实现LRU缓存机制1)使用LinkedHashMap实现LRU缓存2)简单的自定义实现(笔试)HashMap的插入和获取是无序的、也没有大小顺序LinkedHashMap维持插入顺序;如 (1,“a”) (2, “b”)(先插的先访问)维持访问顺序(将最近访问的数据移到链表的尾部 LRU思想 afterNodeAccess(里面处理了Entry的before after属性))主要是底层维护了一个双向链表不能被克隆和序列化(HashM原创 2021-03-03 11:23:07 · 3780 阅读 · 1 评论 -
eclipse安装与查看源码
安装安装JDK时选择上源代码eclispe-》windows->preferences->JREs->找到src.zip查看源码:快捷键F3,也可以使用Ctrl+鼠标左键单击回到上一查看位置Alt+键盘的左右键,找方法的声明处Ctrl +鼠标是原始出处;应该根据调用该方法的对象类型,找其类里是否有该方法的重写查看一个方法被谁引用(调用)1.(首推)双击选中该方法,Ctrl+Alt+H 。Eclipse就会显示出这个方法被哪些方法调用,最终产生一个调用关系树。2.(原创 2021-03-01 22:32:55 · 181 阅读 · 0 评论 -
HashMap与Hashtable的区别和联系
HashtableHashMap继承的父类不同Dictionary (不常用)AbstractMap实现接口map、Cloneable(可复制)、Serializable (可序列化)map、Cloneable(可复制)、Serializable (可序列化)默认容量11(质数)16Table的初始化时机构造函数中第一次put并发操作使用同步机制 ,某一时刻,方法(被synchronized修饰)只能由一个线程去访问如线程安全常用Concurr...原创 2021-03-01 21:10:00 · 322 阅读 · 3 评论 -
使用自定义类型作为HashMap的Key
文章目录使用自定义类型作为HashMap的KeyHashMap思想1、海量日志数据,提取出某日访问百度次数最多的那个2、给定a、b 两 个文件,各存放50亿个url,每个url各占64字节, 内存限制是4G,让你找出a、b文件共同的url自定义Students类型使用自定义类型作为HashMap的Key重写hashCode和equalsHashMap思想K;千 M:百万 G:十亿用来处理海量数据问题 (不容算法、哈希、归并与堆排序、分治思想)1、海量日志数据,提取出某日访原创 2021-03-01 17:06:30 · 883 阅读 · 0 评论 -
WeakhashMap与HashMap之间的区别和联系
文章目录类的继承关系重要方法使用场景相关资料类的继承关系HashMap中的对象可以被拷贝 克隆 序列到磁盘上,WeakhashMap都不行重要方法WeakhashMap的put方法(key重复,新值覆盖旧值;头插新节点)hash算法不一样(WeakhashMap源码297行 ) /** * Retrieve object hash code and applies a supplemental hash function to the * result hash,原创 2021-03-01 16:52:14 · 996 阅读 · 0 评论 -
Java中四大引用(强>软>弱>虚)
Java四大引用强引用软引用SoftReference弱引用 WeakReference虚引用 PhantomReference代码测试参考资料Java中四大引用:(强>软>弱>虚)强引用//A a是创建一个引用,new A()是开辟一块地址空间存放引用的对象A a = new A(); //a是强引用只要是强引用,GC(即垃圾回收)就不会回收被引用的对象(即new A())软引用SoftReference一般用于实现Java对象的缓存,缓存可有 可无,一般将有用但是非必须的原创 2021-03-01 16:30:56 · 279 阅读 · 2 评论 -
float精度问题
Java中,0.99999999f==1f //true原创 2021-02-23 18:25:58 · 636 阅读 · 0 评论 -
位运算符的概念和使用
逻辑运算符&&:逻辑与,全真才为真。若第一个操作数为假,肯定为假,就不判断第二个了。||:逻辑或,有真即为真。若第一个操作数为真 ,肯定为假,就不判断第二个了。!:逻辑非。用来反转操作数的逻辑状态。例true取非后为false。位运算符:操作数在计算机中以补码形式存在,int为4字节 (32)位。取反将二进制形式的操作数每一位都取反,即0变成1,1变成0。例8(即0…000 1000),取反后真值为-9(补码为:1111…1111 0111)与:&参与运原创 2021-02-23 18:23:05 · 8069 阅读 · 2 评论 -
Eclipse的调试技巧
单步调试:注意观察编辑器,在指定行双击设置好断点后,点左上角的虫子可以进入调试界面调试中若要输入数据点击红色方块和右侧图标可以终止调试并切换回代码视图详细介绍:1.Skip All Breakpoints : 将所有断点设置为被跳过的,设置了Skip All Breakpoints之后,所有断点上都会有一个斜线,表示断点将被跳过,线程不会在该断点处被挂起。2.Resume:恢复暂停的线程,直接从当前位置跳到下一个断点位置。3.Suspend:暂停选定的线程,这个时候可以进行浏览或者修改原创 2021-02-23 00:32:43 · 809 阅读 · 0 评论 -
synchornized的使用
synchornized的使用场景1、两个线程同时访问同一个对象的同步方法 安全2、两个线程同时访问两个对象的同步方法 不安全 test1.func1() test2.func1()3、两个线程同时访问(一个或两个)对象的静态同步方法 安全4、两个线程分别同时访问(一个或两个)对象的同步方法和非同步方法 不安全5、两个线程访问同一个对象中的同步方法,同步方法又调用另外一个非同步方法 不安全6、两个线程同时访问同一个对象的不同的同步方法 安全7、两个线程同时访问静态s原创 2021-02-22 15:05:01 · 204 阅读 · 0 评论 -
volatile关键字
volatile关键字作用保证可见性、有序性1、使用volatile修饰变量2、volatile特征1)保存内存可见性volatile修饰的变量不会缓存到工作内存中,每一次读取获取最新volatile变量2)禁止指令重排序Java内存不会对volatile指令进行重排序,从而保证对volatile的执行顺序永远是按照书写顺序执行的happens-before规则:volatile字段的写入操作happen before后续同一个字段的读操作volatile修饰的变量产生的汇编代原创 2021-02-22 15:00:28 · 98 阅读 · 0 评论 -
线程的概念和使用
1.线程和进程的概念1、进程和线程的认识1)进程指的一段正在运行的程序一个程序运行中可以执行过个任务,任务称之为线程2)进程是程序执行过程中资源分配和管理的基本单位线程是cpu执行的额最小单位进程拥有自己的独立的地址空间,每启动一个进程,系统就会分配地址空间进程可以拥有多个线程,各个线程之间共享程序的内存空间为什么出现线程?每个进程有自己独立的地址空间,多并发请求,为每一个请求创建一个进程导致系统开销、用户请求效率低串行 -》 批处理 -》进程 -》线程面试题:多线程和多进程有哪些区原创 2021-02-22 14:37:07 · 187 阅读 · 0 评论 -
哈希表的使用与剖析
哈希表 又称“散列表”,是根据关键码key直接访问内存中存储位置的数据结构,即通过关于key的函数,映射到一个地址来访问数据,这样加快查找速度 数组:查找容易,删除和插入不易 链表:查找不易,插入和删除容易 哈希表是对二者的综合,使得作为一个查找容易、插入和删除也容易的数据结构 哈希冲突 是指对不同的关键字得到同一散列地址; 无冲突时复杂度O(1),冲突较多时时间复杂度变为O(n) 常见解决方法有: 链地址法(也是HashMap在jdk1.8之前的实现结构) 开放地址原创 2021-02-22 14:04:24 · 319 阅读 · 0 评论 -
简单实现ATM机功能(java)
思路ATM机类:import java.util.Scanner;//一个ATM机对应一家银行public class ATM { private Bank bank;//可通过它调用bank里的方法 private int choice=0; private String id; private String passwd; private boolean flag=true;//关机标志 public ATM() {// 初始化 this.bank = new Bank原创 2021-02-02 00:40:34 · 1898 阅读 · 0 评论 -
java实现值交换(swap)
不要传值。因为形参对实参进行值拷贝,函数调用完,释放空间,交换结果传不出来。参数应该为引用类型。1.swap函数定义为public类型public class Test_Swap { //public函数 public void swap(int[] brr,int index1,int index2){ int tmp=brr[index1]; brr[index1]=brr[index2]; brr[index2]=tmp; } public static voi原创 2021-02-02 00:25:18 · 1560 阅读 · 1 评论 -
Scanner报错java.util.NoSuchElementException
代码:import java.util.Scanner;public class Test_Scanner { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String input = sc.next(); sc.close(); Scanner in = new Scanner(System.in); in.next(); }}编译可以通过,但运行输入第一个数原创 2021-02-01 23:38:10 · 1023 阅读 · 0 评论 -
IDEA安装jclasslib
jclasslib bytecode viewer 是一个可以查看反汇编后的字节码的插件安装:网络问题:如果无法下载,可去掉Use secure Connetion使用:原创 2021-02-01 23:05:55 · 541 阅读 · 0 评论 -
测试和解释内存对齐(java)
对象大小主要包括对象头、实例变量和内存填充。我们该如何查看虚拟机为对象开辟的大小呢?为什么计算机要进行内存对齐?内存对齐又有什么规则呢?原创 2021-01-25 20:21:21 · 475 阅读 · 0 评论