标签:Java - 星空

HashMap的初始化过程

HashMap的初始化有两种方法:

HashMap的组成

HashMap的内部实现是一个数组,但是它是一个特殊的数组。如下图所示:
HashMap数据结构

起因

上周五新建了一个项目,在开发完成后,和运维沟通准备上到生产环境中,套用了现有服务的通用启动命名行:

开篇

异常是因为异常在我们的代码开发中是无法避免的一个问题,也是最常见到的问题,简单了解一下异常的组成,对Java的异常有一个初步的了解,最重要的是在实践中遵守几个处理异常的原则,尽量减少处理异常过多而带来的资源消耗和减少因为异常处理不当引起的生产事故。

文章的由来

从大学学习到使用Java开发时间快超过三年,发现自己的系统化学习还是缺乏很多知识点,在此重新系统化的整理一下自己对于Java学习的一些理解, 我相信走的更远不仅仅有聪明人,还有不聪明但是认真并努力的人。

介绍

在以往的JAVA开发中,我们只能使用Date作为日期开发的常用工具,但是随着时代的发展,对日期的操作有了更高的需求,Date无法满足,并且使用起来代码比较繁琐,在此情景下,JAVA8引入了新的日期类-LocalDate以及LocalDateTime,新的时间类都是不可变并且线程安全的,下面我们来学一学它的用法。

BigDecimal的由来

由于互联网金额的高发达和高统一性,关于货币的金额基本都是精确到分,因此double在货币计算中可以说用武之地比较小,Java提供了一个非常强大的货币金额计算工具:BigDecimal

起因

线上long型数据丢失精度问题未解决彻底,本地线上app端出现了该问题,探索新一步的解决方案。

NumberUtils工具类

判断字符串是否是数字

NumberUtils.isNumber(“5.96”);//结果是true

NumberUtils.isNumber(“s5”);//结果是false

NumberUtils.isNumber(“0000000000596”);//结果是true

判断字符串中是否全为数字

NumberUtils.isDigits(“0000000000.596”);//false

NumberUtils.isDigits(“0000000000596”);//true

字符串转换为整数

NumberUtils.toInt(“5”);

NumberUtils.toLong(“5”);

NumberUtils.toByte(“3”);

NumberUtils.toFloat(“3.2”);

NumberUtils.toDouble(“4”);

NumberUtils.toShort(“3”);

找出最大的一个

NumberUtils.max(newint[]{3,5,6});//结果是6

NumberUtils.max(3,1,7);//结果是7

找出最小的一个

NumberUtils.min(newint[]{3,5,6});//结果是6

NumberUtils.min(3,1,7);//结果是7

通过字符串创建BigDecimal类型,支持long、int、float、double、number等数值

NumberUtils.createBigDecimal(“1”);

NumberUtils.createLong(“1”);

NumberUtils.createInteger(“1”);

ArrayUtils工具类

判断数组是否为空, 不为空返回false, 为空true

ArrayUtils.isEmpty(new String[]{“21”,”是”});//结果是false

ArrayUtils.isEmpty(new String[]{“”});//结果是false

ArrayUtils.isEmpty(new String[]{null});//结果是false

ArrayUtils.isEmpty(new String[]{});//结果是true

判断数组是否不为空,不为空返回true,为空false

ArrayUtils.isNotEmpty(new String[]{“21”,”是”});//结果是true

ArrayUtils.isNotEmpty(new String[]{“”});//结果是true

ArrayUtils.isNotEmpty(new String[]{});//结果是false

判断两个数组长度是否相等,长度相等返回true,否则返回false。相比较的两个数组类型必须相同

ArrayUtils.isSameLength(new String[]{“21”,”是”},new String[]{“21”,”是”});//返回false

判断两个数组的类型是否相同,相同返回true,否则返回false

ArrayUtils.isSameType(new String[]{“21”,”是”},newInteger[]{3});

判断两个数组是否相等

ArrayUtils.isEquals(strs,strs);//结果是true

将一个数组转换成String,用于打印

ArrayUtils.toString(new String[]{“21”,”是”});//结果是:{21,是}

赋值(克隆)数组

Object[]s=ArrayUtils.clone(newObject[]{“33”,”yy”});

截取子数组:根据起始索引startIndexInclusive到结束索引startIndexInclusive

Object[]s1=ArrayUtils.subarray(newObject[]{“33”,”yy”,”uu”},0,1);//结果是返回数组:[33]

Object[]s2=ArrayUtils.subarray(newObject[]{“33”,”yy”,”uu”},0,2);//结果是返回数组:[33,yy]

查询某个object在数组中的位置,可是指定起始搜索位置

intindex=ArrayUtils.indexOf(newObject[]{“33”,”yy”,”uu”},”uu”);//结果是2

intindex1=ArrayUtils.indexOf(newObject[]{“33”,”yy”,”uu”},”uu”,2);//结果是2

intindex3=ArrayUtils.indexOf(newObject[]{“33”,”yy”,”uu”},”uu”,3);//结果是-1

反向查询某个object在数组中的位置,可以指定起始搜索位置

intindex11=ArrayUtils.lastIndexOf(newObject[]{“33”,”yy”,”uu”},”33”);//结果是0

intindex22=ArrayUtils.lastIndexOf(newObject[]{“33”,”yy”,”uu”},”33”,2);

查询某个object是否在数组中

ArrayUtils.contains(new String[]{“1”, “2”, “3”}, “11”);

反转数组

ArrayUtils.reverse(new String[]{“22”,”yy”});//结果是:{“yy”,”22”}

添加一object到数组

String[] t={“22”,”yy”};

String[] gg=(String[])ArrayUtils.add(t,”jj”);//{“22”,”yy”,”jj”}

合并两个数组

String[]ggo=(String[])ArrayUtils.addAll(new String[]{“22”,”yy”},new String[]{“jj”});//结果是:[22,yy,jj]

ArrayUtils.addAll(new String[]{“22”,”yy”},new String[]{“jj”, “jj”}); //结果是:[22,yy,jj,jj]

删除数组某个位置的元素

String[]gg4=(String[])ArrayUtils.remove(new String[]{“22”,”yy”},1);

删除数组中某个对象

String[]ggpp=(String[])ArrayUtils.removeElement(new String[]{“22”,”yy”},”yy”);

前因

在dev和qa环境正常获取到用户的userId,dev和qa环境的userId长度都不长,通过userId查询数据,显示数据完全正常。