
java
文章平均质量分 51
bitcarmanlee
这个作者很懒,什么都没留下…
展开
-
java数组Arrays/ArrayUtils工具类常见操作
commons-lang包 org.apache.commons.lang.ArrayUtils类,有许多针对数组的操作,下面我们挑一些常用的方法示例。注意此时不能使用基本类型int, long, double这种,需要转换成相应的包装类。传入一个Comparator接口的实现类REVERSE_ORDER,即可实现逆序排列。注意sort方法是对数组原地排序,并不会返回一个新数组,返回类型为void。jdk中自带的Arrays工具类可以实现对数组排序功能。如果要逆序排,可以按如下操作。原创 2023-05-16 19:56:12 · 829 阅读 · 1 评论 -
java,python遍历文件夹与子文件夹
使用的时候我们不停遍历,可以获取生成器中的内容。1.首先调用listFiles方法,返回Files数组,包含当前目录下的所有目录与文件。我们经常需要针对目录的树形结构进行遍历,即遍历目录中的子文件夹与文件。files也是一个list,里面是该文件夹中所有的文件,但是不包含子目录中的文件。1.listdir(path)返回指定的文件夹包含的文件或文件夹名字列表。dirs是一个list,里面是该文件夹中所有目录的名字,但是不包含子目录。4.如果为文件,进行相应操作(示例中为读取文件的内容)。原创 2022-08-24 18:05:54 · 765 阅读 · 2 评论 -
Java创建线程实例详解
2.创建Callable实现类的实例对象,并使用Future的实现类FutureTask类包装Callable实例对象。1.定义实现类实现Runnable接口,并实现run方法,run方法中的逻辑即为该线程的具体逻辑。使用继承Thread的方式创建线程,缺点就是因为java的单继承机制,使得该类无法再继承其他类。因为创建线程是一个比较重的操作,使用线程池可以减少线程创建销毁等的性能开销。直接继承Thread类的方式,实现简单方便,但是因为单继承问题,无法再继承其他类。run方法中是后返回类型的。...原创 2022-08-18 17:32:24 · 743 阅读 · 1 评论 -
java.util.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodification
1.ConcurrentModificationException有如下代码处理ArrayList @Test public void test1() { List<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); list.add(4); for(int num: list原创 2020-05-29 17:14:23 · 9056 阅读 · 0 评论 -
Java Byte数组与Long的相互转化
1.java.nio中的Bufferjava.nio(NEW IO)是JDK 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API。NIO与原来的IO有同样的作用和目的,但是使用的方式完全不同, NIO支持面向缓冲区的、基于通道的IO操作。 NIO将以更加高效的方式进行文件的读写操作。而缓冲区Buffer是一个容器对象,底层的存储结构为一个数组。在NIO中,所有的数据...原创 2020-04-17 10:03:15 · 12050 阅读 · 1 评论 -
HashMap简单小结
1.HashMap的基础结构在1.7中,HashMap 底层是基于 数组 + 链表的结构组成。在1.8中,如果链表的长度大于一定的值,链表会转成红黑树。2.HashMap的参数(1.8) /** * The default initial capacity - MUST be a power of two. */ static final int DEFAU...原创 2020-03-18 22:18:39 · 248 阅读 · 0 评论 -
Java 程序员都该懂的 volatile 关键字
原文链接https://www.jianshu.com/p/4aea469f8e47一. 主存与工作内存说 volatile 之前,先来聊聊 Java 的内存模型。在 Java 内存模型中,规定了所有的变量都是存储在主内存当中,而每个线程都有属于自己的工作内存。线程的工作内存保存了被该内存使用到的变量的主内存副本拷贝,线程对变量的所有操作(读取,赋值等)都必须在工作内存中进行,而不能直接对...转载 2020-02-20 16:39:47 · 595 阅读 · 0 评论 -
java线程池小结
1.线程池相关的类1.Executor接口,将任务提交与任务的细节解耦开。Executor接口只有一个execute方法public interface Executor { /** * Executes the given command at some time in the future. The command * may execute in a ne...原创 2019-12-28 20:49:24 · 368 阅读 · 0 评论 -
单个id聚合
1.问题描述最近项目中经常需要处理这样的case:{"a", "b", "c", "d", "e", "f", "g"}{"a,b,c","d,e","f,h", "k"}上面两个集合,其中第一个集合全是单个id,第二个集合是多个id。现在需要将第一个集合中的id,按照第二个集合聚在一起。例如按上面两个集合,最终的输出为:deabcf2.解决方案这还算是一个比较复杂的问题。经过思考,给出了如下原创 2017-12-18 10:01:07 · 706 阅读 · 0 评论 -
java泛型方法实现数值类型加法
1.实现数值类型加法实际开发中,经常有数值类型求和的需求,例如实现int类型的加法: public int add(int num1, int num2) { return num1 + num2; }有时候还需要实现long类型的求和: public long add(long num1, long num2) { return num1 + n原创 2017-12-06 18:24:08 · 12687 阅读 · 1 评论 -
字符串匹配算法
字符串匹配是日常开发中经常使用的case,比如在java中就有indexOf方法。我们现在试着来自己实现一下字符串匹配的算法。1.暴力循环法暴力算法自然就是双层循环了。具体来说,对于长度为n的源字符串S与长度为m的模式匹配串P,在S中是否存在一个i,当0interface StringMatcher { int indexOf(String source, String pattern);}原创 2017-12-11 22:12:39 · 599 阅读 · 0 评论 -
list的一些常见用法总结(实用干货收藏)
1.将list转成String要将list转成String,常规的办法是使用for循环。很明显那样代码会比较冗长不够优雅。在java8以后,我们可以有以下的简便方法: @Test public void listjoin() { // 如果是String类型,直接用String.join String[] raw1 = {"a", "b", "c", "d原创 2017-11-21 23:07:13 · 2433 阅读 · 0 评论 -
java8中的Stream用法详解
1.为什么java8中加入StreamStream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作(aggregate operation),或者大批量数据操作 (bulk data原创 2017-11-09 17:37:10 · 55055 阅读 · 8 评论 -
java泛型中的通配符 extends与super
1.java泛型中的关键字java泛型中有如下关键字: 1. ? 表示通配符类型 2. <? extends T> 既然是extends,就是表示泛型参数类型的上界,说明参数的类型应该是T或者T的子类。 3. <? super T> 既然是super,表示的则是类型的下界,说明参数的类型应该是T类型的父类,一直到object。2.示例代码public class GenericClass {原创 2017-10-22 22:22:59 · 1560 阅读 · 0 评论 -
java集合的相互转化(map,set,list,array)
1.应用场景java中有丰富的集合类,日常开发中几乎时刻需要使用到各种各样的集合类,其中常用的集合类包括有Map,Set,List,Array等等。下面我们就来针对各个集合类的相互转化做一下总结。2.实测代码二话不说,直接上代码。import org.junit.Test;import java.util.*;/** * Created by WangLei on 17-12-18. */pu原创 2017-12-18 11:30:31 · 2341 阅读 · 0 评论 -
java中的值传递与引用传递
在java中,如果参数类型是原始类型,那么传过来的就是这个参数的一个副本,也就是这个原始参数的值,如果在函数中改变了副本的 值不会改变原始的值。 如果参数类型是引用类型,那么传过来的就是这个引用参数的副本,这个副本存放的是参数的地址。如果在函数中没有改变这个副本的地址,而是改变了地址中的 值,那么在函数内的改变会影响到传入的参数。如果在函数中改变了副本的地址,如new一个,那么副本就指向了一个...原创 2018-03-22 14:45:11 · 471 阅读 · 0 评论 -
dependencies与dependencyManagement的区别
1、DepencyManagement应用场景当我们的项目模块很多的时候,我们使用Maven管理项目非常方便,帮助我们管理构建、文档、报告、依赖、scms、发布、分发的方法。可以方便的编译代码、进行依赖管理、管理二进制库等等。 由于我们的模块很多,所以我们又抽象了一层,抽出一个itoo-base-parent来管理子项目的公共的依赖。为了项目的正确运行,必须让所有的子项目使用依赖项的统一版本...原创 2018-04-03 17:41:37 · 1539 阅读 · 0 评论 -
反转二叉树
反转二叉树,因为Max Howell(Homebrew,mac版的apt-get作者 )出名: Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so fuck off.在leetcode上找了这道题的解答1.递原创 2016-05-30 16:01:30 · 5592 阅读 · 1 评论 -
Comparable与Comparator
0 前言Java中有两种比较方法:Comparable与Comparator,这里头具体有什么区别呢?下面来了解一下。1.Comparable源码jdk中Comparable的源码如下public interface Comparable<T> { public int compareTo(T o);}Comparable位于java.lang包中,意味中我们不需要额外...原创 2019-07-14 16:52:43 · 327 阅读 · 0 评论 -
java中的T extends Comparable ? super T
<T extends Comparable<? super T>> 这样的类型参数 (Type Parameter) 在 JDK 中或工具类方法中经常能看到。例如在Collections中的sort方法: public static <T extends Comparable<? super T>> void sort(List<T&g...原创 2019-07-12 17:28:23 · 1284 阅读 · 1 评论 -
java线程系列一:Thread类中的start()方法与run方法
1.java中的线程状态在java中,线程通常有五种状态:创建,就绪,运行,阻塞与死亡。1:创建(NEW)在生成线程对象的时候,并没有调用start方法,这是线程的创建状态。2:就绪(RUNABLE)当调用线程对象的start方法以后,线程就进入了就绪状态。但是此时线程调度程序还没有把该线程设置为当前线程,此时处于就绪状态。在线程运行之后,从等待或者睡眠中回来之后,也会处于就绪状态。3...原创 2019-04-08 23:39:45 · 3903 阅读 · 1 评论 -
? extends T 与 ? super T
java的一个设计理念是,与泛型相关的异常最好是在编译期间就被发现,因此设计了extends与super这两种方式。具体来说,List<? extends T>表示该集合中存在的都是类型T的子类,包括T自己。而List<? super T>表示该集合中存的都是类型T的父类,包括T自己。List<? extends T>如果去添加元素的时候,因为list中存...原创 2019-03-05 19:43:32 · 10723 阅读 · 6 评论 -
JAVA异常处理实战心得
1.异常分类异常Exception是Java中非常常用的功能,它可以简化代码,并且增强代码的安全性。尤其是在各种服务相关的代码中,可能正常业务逻辑的代码量很少,大部分都是各种try catch处理各种异常的代码,因为实际中异常情况很多,为了保证服务的健壮与稳定性,要尽可能考虑与处理掉各种异常情况。所以在java中遇到大段大段的try catch也就不足为奇。(图片来自网络)从上面的图可以看...原创 2018-09-28 16:42:12 · 4109 阅读 · 0 评论 -
读取jar包中的资源文件
1.jar包中的资源文件在日常项目中,经常会将一些资源文件或者配置文件打入最终的jar包中。我们可以查看jar包中是否包含这个文件,但是无法看到jar包中这个文件的具体内容。这个时候怎么办呢?下面教大家一种比较简单快捷的方式。2.读取jar包中的资源文件假设项目A中,resources里有个zookeeper.properties的文件。打包的时候,这个zookeeper.propertie...原创 2018-09-26 19:00:24 · 4083 阅读 · 0 评论 -
java异常处理中的返回值
1.try-catch中的返回值java代码中,有各种各样的try-catch代码用来捕获各种异常。那么在try-catch代码中,返回值是如何处理的呢?先看看下面的代码 public static int test_finally() { int x; try { x = 1; //int y = ...原创 2018-08-16 17:51:31 · 8570 阅读 · 1 评论 -
java学习资料总结
1.https://blog.youkuaiyun.com/briblue/article/details/54973413 一看你就懂,超详细java中的ClassLoader详解原创 2018-05-17 10:50:26 · 573 阅读 · 0 评论 -
单例模式(Singleton mode)实战讲解
单例模式是实际项目中使用最多的一种设计模式,有着非常广泛的使用场景。下面我们就结合一个实际项目中的例子,来说说单例模式的使用方式。1.经典单例模式import java.util.HashMap;import java.util.Map;/** * Created by WangLei on 17-5-4. */public class Singleton { private stat原创 2017-05-04 20:24:40 · 2031 阅读 · 0 评论 -
java 不以科学记数法输出double
很多时候我们需要输出double数字的字符串形式。但是java默认的double输出方式为科学记数法,显然不符合我们的要求,以下两种方法都能达到我们的目的。1.使用DecimalFormat类 public static void t1() { Double num1 = 100000000.0; System.out.println(num1); // 1原创 2017-08-02 10:17:57 · 6787 阅读 · 0 评论 -
java常见基础面试题
虽然实际中一直在写java代码,但是很多时候一些基础的东西还是需要注意一下的。特意记录一下一些基础方面的知识,权当自己做笔记了,后面也有统一的地方可以查。1.Java中实现多态的机制多态是面向对象的一个基本特征。java中的多态是指父类或接口定义的引用变量可以指向子类或具体实现类的实例对象,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方原创 2017-07-30 11:24:02 · 526 阅读 · 0 评论 -
理解Java对象序列化
关于Java序列化的文章早已是汗牛充栋了,本文是对我个人过往学习,理解及应用Java序列化的一个总结。此文内容涉及Java序列化的基本原理,以及多种方法对序列化形式进行定制。在撰写本文时,既参考了Thinking in Java, Effective Java,JavaWorld,developerWorks中的相关文章和其它网络资料,也加入了自己的实践经验与理解,文、码并茂,希望对大家有所帮助。(转载 2016-10-02 22:13:15 · 495 阅读 · 0 评论 -
java泛型通俗讲解
1.为什么需要泛型我们知道java是属于强类型编程语言。变量在使用之前,需要先进行定义,而定义个变量时必须要指定其数据类型,这样编译期在编译阶段就能将很多类型错误消灭在萌芽状态。如果我们有这样一个需求:定义一个坐标类。但是该坐标类的数据类型可能是整数,也可以能是小数,还有可能是字符串。举个例子原创 2016-08-27 17:26:31 · 5417 阅读 · 3 评论 -
Java中的可变参数使用
1.可变参数的定义从JDK1.5之后,java就提供了变长参数(variable arguments,varargs)。我们在定义方法的时候,可以使用不确定个数的参数。对于同一个方法,也可以通过不确定参数个数的方式进行重载。首先来看个最简单的例子:public void printArray(String... args) { for(int i=0; i<args.length; i++)原创 2016-08-26 18:12:12 · 9302 阅读 · 1 评论 -
java 十进制与二进制,八进制,十六进制之间的转换
实际开发过程中,经常会有十进制的数据跟其他进制数据互相转化的情况。比如十进制与二进制,八进制,十六进制之间的相互转化。为了方便起见,特意将java中不同进制间相互转化的代码整理以备后续使用。package leilei.bit.edu.sort;public class NumRadixConvert { public static void decimal_to_other() {原创 2016-06-17 11:41:19 · 3011 阅读 · 0 评论 -
java 中== equals hashcode源码剖析
1.==java中的==操作,比较的是两个对象的内存地址。如果两个对象的内存地址一致,则返回true。否则返回false。看一个简单的测试代码:public static void test() { String s1 = "abc"; String s2 = "abc"; String s3 = "a" + "bc"; String s4 = new String(原创 2016-07-12 12:02:14 · 820 阅读 · 0 评论 -
java 常用习惯用法总结
注:本文是根据网络上的文章受启发,自己再写代码总结而成。因为无法找到原文的原始出处,所以没法给出原文链接。文章也会引用部分网络素材内容,如果原作者看到请与我联系。前言本博主写java属于半道出家,与专业java开发同学相比水平不可同日而语,所以平时有空的话会多写写java代码。正好在网上看到一篇关于java习惯用法的总结,觉得还不错,于是按照文章里的大致架构,自己重新实现了一把里面的相关代码,相当于原创 2016-06-18 00:18:29 · 1647 阅读 · 0 评论 -
java 读取配置文件的几种方法
比如我们有以下目录|--project |--src |--javaapplication |--Test.java |--file1.txt |--file2.txt |--build |--javaapplication |--Test.class转载 2016-04-21 21:39:30 · 1892 阅读 · 0 评论 -
用java数组实现栈
栈是一种常见的数据结构。如果用一句话来概括栈的特点,估计大部分同学都能脱口而出:后进先出,即先进来的元素保存在栈的最底部,新来的元素则在栈顶堆积,直到栈满为止;而取元素的时候,只能从栈顶取,直到栈空为止。整个过程,与摞书的过程很类似:放书的时候都是摞在最上面,取书的时候也是从最上面开始取。要想取出下面的书,就必须先将上面的书先取走。原理就讲这么多,本身也比较简单。接下来,照例是咱们的口号: tal原创 2016-05-30 13:06:30 · 7150 阅读 · 0 评论 -
java匿名内部类
匿名内部类也就是没有名字的内部类 正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写 但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口实例1:不使用匿名内部类来实现抽象方法abstract class Person { public abstract void eat();}class Child extends Person { public v原创 2016-04-26 22:28:28 · 513 阅读 · 0 评论 -
java class类
java中实例化Class类对象的三种方式: 第一种、通过forName(); 第二种、类.class 第三种、对象.getClass()测试案例:package com.lfl.demo;public class GetClassDemo1 { public static void main(String[] args) { Class<?> c1 = null;// ?是泛型中的通配转载 2016-04-26 22:55:34 · 755 阅读 · 0 评论 -
java内部类详解
内部类不是很好理解,但说白了其实也就是一个类中还包含着另外一个类如同一个人是由大脑、肢体、器官等身体结果组成,而内部类相当于其中的某个器官之一,例如心脏:它也有自己的属性和行为(血液、跳动)显然,此处不能单方面用属性或者方法表示一个心脏,而需要一个类而心脏又在人体当中,正如同是内部类在外部内当中实例1:内部类的基本结构//外部类class Out { private int age = 1转载 2016-04-26 22:15:39 · 642 阅读 · 0 评论