
java基础
主要介绍java的基础知识
王也`
这个作者很懒,什么都没留下…
展开
-
String类型最大长度你能想到吗
如果看String的源码的话会发现String.length方法返回的值是int,而int的最大值大概是20多亿,但是String字符串长度肯定到达不了这个数,因为java文件在编译成class文件的时候会把常量放在常量池中,而常量池中每一种数据都有自己的类型,String字符串在常量池中以CONSTANT_Utf8类型表示。CONSTANT_Utf8的数据结构CONSTANT_Utf8_info {undefinedu1 tag;u2 length;u1 bytes[len原创 2022-05-20 23:35:08 · 1336 阅读 · 0 评论 -
Stream流操作
今天了解了Stream流操作,觉得很有意思,如果在写代码的时候应用到,还是能有很大的帮助的。举个例子,有一个List<String>,我想要找出长度大于10的元素有几个。原创 2022-05-19 21:52:33 · 1292 阅读 · 0 评论 -
仿写HashMap
最近阅读了HashMap的源码,为了加深对HashMap的理解自己动手仿写了一个HashMap,主要实现了get(),put(),resize()方法。具体的说明在代码的注释里。public class MyHashMap<K,V> { private Node<K,V>[] table; private int size=0; private int capacity; private float loadFactor; /**原创 2022-04-11 20:00:29 · 225 阅读 · 0 评论 -
new对象时JVM做了哪些工作
如果类没有被加载进虚拟机,jvm首先将类加载进虚拟机内存1、类加载,将累加载进jvm,并在准备阶段将类中的静态属性赋默认值,零值。2、初始化类,执行静态代码块,为静态变量赋初值(一个类的静态代码块只执行一次,只能jvm调用)类加载进内存之后 为实例对象分配内存空间,同时给非静态属性赋默认值(空闲列表,指针碰撞,展开说说) 调用父类构造器 父类构造器执行完之后后,如果自己声明属性的同时有显示的赋值,那么进行进行显示赋值把默认值覆盖。 执行匿名代码块 执原创 2022-04-04 19:11:52 · 1054 阅读 · 0 评论 -
java中的反射
获取类信息的三种方式1、类名.class2、对象.getClass()3、Class.forName(字符串) 这个字符串是全限定名:包名+类名原创 2022-03-12 23:35:20 · 600 阅读 · 0 评论 -
Java中的值传递
什么是值传递、引用传递java中的传递是值传递,且java没有引用传递。值传递:将一个变量的值传给另一个变量。不管这个变量基本数据类型还是引用数据类型。引用数据类型的话传的还是值。不过这个值是指向对象的地址。引用传递:地址传递,传的是另一个变量的内存地址。java中没有引用传递。理解值传递:1、基本数据类型:public static void main(String[] args) { int a=123; int b=321;原创 2022-03-11 08:14:40 · 1090 阅读 · 0 评论 -
彻底了解128陷阱
128陷阱指的是,两个Integer数据类型(引用数据类型)在一定范围内用 == 判断,会返回true。这个范围默认就是-128--127之所以在-128--127 这个范围内会出现这样的结果,是因为Integer在初始化的时候有一个cache数组,这个数组的范围默认是-128--127,如果在这个范围则,Integer 变量指向的是这个数组里的一个元素。所以当用==判断的时候返回结果为true(判断的都是同一个对象的地址)源码:初始化cache数组的源码:记住:如果..原创 2022-03-09 14:23:50 · 298 阅读 · 0 评论 -
String字符串常用Api
1、通过index获取字符串中的字符char c = string.charAt(index)2、字符串转数组,通过分隔符String s="1,1,1";String[] str = s.split(",");结果:原创 2022-02-12 20:23:56 · 281 阅读 · 0 评论 -
java--插入排序
基本思想:从待排数列第一个数据开始当做有序数列,后面的当做无序数列,将无序数列中的元素在有序数列从后向前扫描找到他的位置插入,将该位置后面的数据向后移动。时间复杂度:O(n²), 最高好情况O(n) ,最坏的情况O(n²)步骤:代码:public class InsertSort { public static void main(String[] args) { int[] arr={12,34,6,4,89,75,134,44,86,90}; ...原创 2022-01-08 20:08:10 · 289 阅读 · 0 评论 -
java--快速排序
基本思想,通过一趟排序将待排数组分成两个部分,其中一部分的所有元素都比另一部分的要小,然后对这两个部分继续分别进行排序,直到整个待排数组都变成有序数列。算法描述快速排序使用分治法将一个串分成两个串(子列表),具体步骤:1、每次排序都会选取数组中的一个元素当做基准数。2、基准数一般会选取数组最左边的数。 然后从两边开始进行检索,首先从右边开始检索比基准数小的元素,然后停下。其次从左边开始检索比基准数大的元素,检索到就停止。然后交换两个数,继续检索...原创 2022-01-08 11:11:19 · 572 阅读 · 0 评论 -
java--堆排序
堆排序用到的数据结构是完全二叉树,完全二叉树要求,从上到下从左到右每一层节点多是满的,并且如果有未满层,则这个层所有元素都集中在最左边。堆排序思想,将完全二叉树构造成大顶堆,然后将第一个元素与最后一个元素交换位置,再将剩下的元素构造大顶堆,继续交换位置,重复操作。chushishi...原创 2022-01-07 00:09:59 · 704 阅读 · 0 评论 -
HashMap
HashMap是java中的数据集合,在jdk1.8的实现结构是数组加红黑树,jdk1.7的结构是数组加链表。但是这种数据结构当链表的长度很长时他的查询时间复杂度就降低到O(n),而红黑树就是一种平衡二叉树,他的查询时间复杂度是O(logn)HashMap的基本使用1、put方法构造键值对,插入hashmapMap<String,String> map =new HashMap<String ,String>(); map.put("1","..原创 2021-12-30 11:13:49 · 304 阅读 · 0 评论 -
java中的工具类Stack
Stack是jdk封装的栈结构。Stack 中常用的方法方法名 返回类型 说明 empty boolean 判断stack是否为空。 peek E 返回栈顶端的元素。 pop E 弹出栈顶的元素 push E 将元素压入栈 search int 返回最靠近顶端的目标元素到顶端的距离。 empty:判断栈是否为空。 public boolean empty() { return siz原创 2021-12-29 17:58:13 · 324 阅读 · 0 评论 -
字符串常用api
1、字符串转数组 String.toArray();String str="first";char[] strArray=str.toCharArray();2、数字转字符串 String.valueOf(x)int num=12345;String str=String.valueOf(num); 除了数字类型之外还有,字符,浮点数,布尔型...原创 2021-12-29 13:23:49 · 290 阅读 · 0 评论 -
Mybatis-plus常用注解
@TableName映射数据库表作用:数据库表名和实体类名不对应时进行绑定原创 2021-12-01 17:02:01 · 840 阅读 · 0 评论 -
源码解析128陷阱
java中的自动装箱拆箱机制简单一点说,装箱就是自动将基本数据类型转换为包装器类型;拆箱就是自动将包装器类型转换为基本数据类型。为对于Integer,在(-128,128]之间只有固定的256个值,所以为了避免多次创建对象,我们事先就创建好一个大小为256的Integer数组SMALL_VALUES,所以如果值在这个范围内,就可以直接返回我们事先创建好的对象就可以看源码private static class IntegerCache { static final.原创 2021-11-21 21:15:15 · 94 阅读 · 0 评论