java
Bee.F
这个作者很懒,什么都没留下…
展开
-
java常用校验注解
验证注解的元素值在最小值和最大值之间,并且类型为BigDecimal,BigInteger,CharSequence,byte,short,int,long。被注解的元素其值必须大于等于最小值,并且类型为int,long,float,double。被注解的元素其值必须小于等于最小值,并且类型为int,long,float,double。被注解的元素的长度必须在指定范围内,并且类型为String,Array,List,Map。被注解的元素必须符合指定的正则表达式,并且类型为String。转载 2024-07-12 18:15:20 · 184 阅读 · 0 评论 -
字符串常量池位于JVM哪里
Java6 和6之前,常量池是存放在方法区(永久代)中的。Java7,将常量池是存放到了堆中。Java8 之后,取消了整个永久代区域,取而代之的是元空间。运行时常量池和静态常量池存放在元空间中,而字符串常量池依然存放在堆中。原创 2023-09-29 13:54:08 · 1254 阅读 · 0 评论 -
强引用、软引用、弱引用和虚引用的区别
主要的区别在于什么时候回收对象;- 强引用:垃圾回收器就不会回收这个对象;- 软引用:如果内存足够,不回收,如果内存不足,则回收;- 弱引用:不管当前内存空间足够与否,都会回收;- 虚引用:形同虚设,在任何时候都可能被垃圾回收器回收;原创 2023-07-14 17:31:38 · 260 阅读 · 0 评论 -
HashMap 和 IdentityHashMap 的区别
IdentityHashMap 处理冲突的方式是开发地址法中的线型再探测,当前的位置别占用后,就在右相邻的位置去找,而 IdentityHashMap 中一个 key-value 键值对,占用 table 的两个位置,所以这里的操作是加 2,如果超出 table 大小,再从 0 开始。但是这里 IdentityHashMap 的效果更好,因为动态代理出入的接口的个数非常少,产生冲突的概率非常小,结构更简单的 IdentityHashMap 在此场景下,就更加适用。进行新 key 的插入操作。转载 2023-03-26 21:09:02 · 543 阅读 · 1 评论 -
java 集合和字符串转换
String s1 = Joiner.on(",").join(list1);List list2 = Splitter.on(",").splitToList(s1);原创 2022-11-07 22:26:57 · 2286 阅读 · 0 评论 -
内存泄漏和内存溢出的区别和联系
内存泄漏和内存溢出1、内存泄漏 memory leak:是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出;2、内存溢出 out of memory :指程序申请内存时,没有足够的内存供申请者使用,或者说,给了你一块存储int类型数据的存储空间,但是你却存储long类型的数据,那么结果就是内存不够用,此时就会报错 OOM,即所谓的内存溢出;两者的关系内存泄漏的堆积最终会导致内存溢出,内存溢出就是你要的内存空间超过了系统实际分配给你的原创 2021-10-31 14:48:46 · 241 阅读 · 0 评论 -
LocalDate和Date相互转换
LocalDateTime是jdk8的新增的类 ,还有LocalDate,LocalTime;我们可能用到类里面的一些方法,例如传入的时间和当前时间做比较,就需要将Date转为LocalDate或其他两个,Date转换为LocalDateDate date = new Date();LocalDate localDate = date.toInstant() .atZone(ZoneId.systemDefault()) //设置当前系统时区 .toLocalDat原创 2021-10-31 14:02:02 · 12418 阅读 · 0 评论 -
java代码一些技巧
1、尽量减少对变量的重复计算明确一个概念,对方法的调用,即使方法中只有一句语句,也是有消耗的,包括创建栈帧、调用方法时保护现场、调用方法完毕时恢复现场等。所以例如下面的操作:for (int i = 0; i < list.size(); i++){ ...}建议替换为:for (int i = 0, length = list.size(); i < length; i++){ ...}2、乘法和除法使用移位操作例如:for (val = 0; val <原创 2021-10-30 23:34:18 · 286 阅读 · 1 评论 -
一些工具类整理
一些工具类整理1、Java自带工具方法1.1两个List集合取交集List<String> list1 = Arrays.asList("a","b","c");List<String> list2 = Arrays.asList("a","b","d");list1.retainAll(list2);System.out.println(list1); // 输出[a, b]2、commons-lang<dependency> <grou原创 2021-07-21 07:12:36 · 327 阅读 · 0 评论 -
List 取交集,并集,差集
引入依赖<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-collections4</artifactId> <version>4.4</version></dependency>// 两个集合取交集Collection<String> collection = Collect原创 2021-07-19 23:20:25 · 547 阅读 · 0 评论 -
json字符串转对象
第一种,使用fastjson 工具类1、引入依赖;<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.73</version></dependency>2、代码// ResultModel 为需要转换的对象String jsonStr = "";原创 2021-05-02 00:37:46 · 665 阅读 · 0 评论 -
java 自定义注解校验
有时候JSR303的规范自带的注解不满足我们的数据校验需求,例如显示状态showStatus,只能接受0和1,这时我们可以自己写自定义注解校验规则;在实体类加@ListValue注解,vals里面的值表示只能接收的值;@ListValue(vals={0,1})private Integer showStatus;编写自定义ListValue自定义校验接口类;import javax.validation.Constraint;import javax.validation.Payload;原创 2021-04-14 07:26:38 · 690 阅读 · 0 评论 -
java对象字段名转化——@SerializedName
有时调用第三方接口返回的字段名和我们接收对象字段名不一致或不规范,可以使用@SerializedName 这个注解进行转换;直接上代码:@Datapublic class xxxVo { // 将别名product_name转为productName @SerializedName("product_name") private String productName; // 将别名downloadurl、DownloadUrl或Downloadurl 转为原创 2021-04-13 07:15:34 · 2966 阅读 · 0 评论 -
抽象工厂模式(通俗易懂)
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。理解产品族和产品等级产品族:一个品牌下面的所有产品;例如华为下面的手机,路由器,电脑 称为华为的产品族;产品等级:多个品牌下面的同种产品;例如华为和小米下面的手 称为一个产品等级;类图分析:以下图为例,有手机和路由器两种产品,有华为和小米两种品牌,两种品牌都可以生产手机和路由器;有手机和路由器原创 2020-11-25 00:09:11 · 45746 阅读 · 32 评论 -
List 集合类不安全的3种解决方法和浅浅的源码分析
本篇文章不会讲的太深入,原因有2,其一怕别人看不懂,其二,我也讲不出来;单线程下List集合类是完全ok的,但在多线程下可能就不太ok了;public class ListTest { public static void main(String[] args) { List<String> list = new ArrayList<>(); for (int i = 0; i < 30; i++) { new Thread(()-&g原创 2020-09-08 01:12:43 · 347 阅读 · 0 评论 -
Callable源码分析
Callable 源码分析创建线程有3种方法:1、继承Thread接口,重写run方法,调用start方法;public class MyThread1 extends Thread { @Override public void run() { //TODO } public static void main(String[] args) { new MyThread1().start(); }}2、实现Runnable接口,重写run方法;执行线程放入runnable原创 2020-09-05 14:48:09 · 270 阅读 · 0 评论 -
jdk8中的并行流和顺序流
并行流与顺序流并行流就是把一个内容分成多个数据块,并用不同的线程分别处理每个数据块的流。java8中将并行进行了优化,我们可以很容易的对数据进行并行操作。Stream API可以声明性地通过 paralle() 与 sequential()在并行流与顺序流之间进行切换。并行流计算0~10亿的和@Testpublic void test3(){ long start = Syst...原创 2020-03-14 10:23:04 · 651 阅读 · 0 评论 -
jdk8 Stream API用法
Java8中有两大最为重要的改变。第一个是 Lambda表达式:另外个则是 Stream API(java.uti1. stream.* )Stream是Java8中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用 Stream API对集合数据进行操作,就类似于使用SQL执行的数据库查询。也可以使用 Stream API来并行执行操作...原创 2020-03-03 08:24:33 · 136 阅读 · 0 评论 -
lambda表达式方法引用和构造器引用
方法引用若lambda体中的功能,已经有方法提供了实现,可以使用方法引用;可以将方法引用理解为 lambda 表达式的另外一种表现形式;对象的引用 :: 实例方法名public void test1(){ //Comparator 消费型接口 Consumer<String> con = (str) -> System.out.println(str); ...原创 2020-03-01 09:41:27 · 416 阅读 · 0 评论 -
jdk8 lambda 内置的四大核心函数式接口
Consumer : 消费型接口void accept(T t);public void test1(){ happy(10000, (m) -> System.out.println("大保健,每次消费:" + m + "元"));}public void happy(double money, Consumer<Double> con){ con.a...原创 2020-02-29 13:09:22 · 396 阅读 · 0 评论 -
lambda表达式格式
Lambda表达式Lambda是一个匿名函数,我们可以把 Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。Lambda表达式左侧:Lambda 表达式的参数列表;Lambda表达式右侧:Lambda 表达式中所需执行的功能, 即 Lambda体;Lambda表达式的语法格式...原创 2020-02-29 10:34:51 · 786 阅读 · 0 评论 -
lambda和Stream API的简单入门例子
jdk1.8新增了许多新特性,其中lambda和Stream API的引入使我们的代码简洁和优雅,下面举2个简单的入门例子和jdk1.7以前做对比;比较2个值的大小jdk1.7以前的写法:public void test01(){ Comparator<Integer> com = new Comparator<Integer>() { @Ov...原创 2020-02-28 00:35:25 · 102 阅读 · 0 评论 -
PostgreSQL的SQL语句参数上限 An I/O error occurred while sending to the backend
An I/O error occurred while sending to the backend.原创 2020-01-08 21:56:53 · 53348 阅读 · 6 评论 -
常用的几种初始化List集合的方式
常规方式List<String> list = new ArrayList<>();//List<String> list = new ArrayList<String>();list.add("a");最常见也最不爽的方式,没什么好说的后面缺失的泛型类型在 JDK 7 之后就可以不用写具体的类型,改进后会自动推断类型,不过本人还是习惯性...原创 2020-01-07 21:49:06 · 1310 阅读 · 1 评论 -
List去重
HashSet对List去重我们都知道List集合是有序可重复的,Set是无序不可重复的,如果要对一个List集合的元素去重,正好可以利用Set的优点;//strs为存在重复元素的ListList<String> strs = Lists.newArrayList("a","b","a","c");List<String> distinctStrs = new Ar...原创 2020-01-07 21:44:02 · 125 阅读 · 0 评论