java基础
对java的基础知识进行总结
WD技术
这个作者很懒,什么都没留下…
展开
-
Java中transient关键字的详细总结
https://blog.csdn.net/u012723673/article/details/80699029原创 2022-03-10 08:39:14 · 138 阅读 · 0 评论 -
代码解释n |= n >>> 16
n-=1;// n=1000000(二进制)…//16、8无变化n|=n>>>4;//n=n|(n>>>4)=1000000|0000100=1000100n|=n>>>2;//n=n|(n>>>2)=1000100|0010001=1010101…看出规律来了吧,右移多少位,就把最高位右边的第x位设置为1;第二次,就把两个为1的右边xx位再设置为1;第n次,就把上一步出现的1右边xxxx位置为1;//xxx随便写写,意会原创 2022-03-07 20:34:59 · 491 阅读 · 0 评论 -
红黑树的特性
简介R-B Tree,全称是Red-Black Tree,又称为“红黑树”,它一种特殊的二叉查找树。红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black)特性(1)每个节点或者是黑色,或者是红色。(2)根节点是黑色。(3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!](4)如果一个节点是红色的,则它的子节点必须是黑色的。(5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。注意(01) 特性(3)中的原创 2022-02-23 19:13:27 · 209 阅读 · 0 评论 -
hashmap的五种便利方式
1.迭代器 EntrySetpublic class HashMapTest { public static void main(String[] args) { // 创建并赋值 HashMap Map<Integer, String> map = new HashMap(); map.put(1, "Java"); map.put(2, "JDK"); map.put(3, "Spring Framew原创 2022-02-23 15:35:49 · 2084 阅读 · 0 评论 -
hashmap的get查找过程
1、通过hash值获取该key映射到的哈希桶2、如果桶上的key就是要找的key,则找到并返回3、不是的话,查看后续节点(1)、后续是红黑树,调红黑树的方法根据key获取value(2)、后续是链表,则循环遍历链表根据key获取value...原创 2022-02-23 15:29:22 · 1191 阅读 · 0 评论 -
HashMap的存储过程
首先判断key是否为null,如果为null调用putkeyofnull方法,不为null,使用key计算hash值,然后去数组中找索引,如果存在,比较key,可以值相等,覆盖value。key值不相等,将 entry的next指向该值,原创 2022-02-23 15:03:06 · 464 阅读 · 0 评论 -
HashMap的扩容机制---resize()
扩容就是重新计算容量,向HashMap对象里不停的添加元素,而HashMap对象内部的数组无法装载更多的元素时,对象就需要扩大数组的长度,以便能装入更多的元素。什么时候扩容?当向容器添加元素的时候,会判断当前容器的元素个数,如果大于等于阈值—即当前数组的长度乘以加载因子的值的时候,就要自动扩容啦。怎么扩容?1、jdk1.7假设了我们的hash算法就是简单的用key mod 一下表的大小(也就是数组的长度)。其中的哈希桶数组table的size=2, 所以key = 3、7、5,put顺序依次为原创 2022-02-23 14:44:23 · 353 阅读 · 0 评论 -
Hashmap链表长度为8时转换成红黑树,你知道为什么是8吗
为什么要转换?每次遍历一个链表,平均查找的时间复杂度是 O(n),n 是链表的长度。红黑树有和链表不一样的查找性能,由于红黑树有自平衡的特点,可以防止不平衡情况的发生,所以可以始终将查找的时间复杂度控制在 O(log(n))。最初链表还不是很长,所以可能 O(n) 和 O(log(n)) 的区别不大,但是如果链表越来越长,那么这种区别便会有所体现。所以为了提升查找性能,需要把链表转化为红黑树的形式。为什么不直接用红黑树?通常如果 hash 算法正常的话,那么链表的长度也不会很长,那么红黑树也不会带来原创 2022-02-23 12:19:18 · 2524 阅读 · 0 评论 -
HashMap的负载因子为什么默认是0.75
作用负载因子是和扩容机制有关的,意思是如果当前容器的容量,达到了我们设定的最大值,就要开始执行扩容操作。比如说当前的容器容量是16,负载因子是0.75,16*0.75=12,也就是说,当容量达到了12的时候就会进行扩容操作原因我们在考虑HashMap的时候,首先要想到的是HashMap只是一个数据结构,既然是数据结构最主要的就是节省时间和空间。负载因子的作用肯定也是节省时间和空间。为什么节省呢?我们考虑两种极端情况1、负载因子是1.0我们先看HashMap的底层数据结构我们的数据一开始是保存在原创 2022-02-23 11:06:51 · 271 阅读 · 0 评论 -
HashMap到底是插入链表头部还是尾部
在jdk1.8之前是插入头部的,在jdk1.8中是插入尾部的。原创 2022-02-23 10:57:17 · 527 阅读 · 0 评论 -
hashmap为什么容量是2的n次方
我们知道在hashmap中要找到某个元素,需要根据key的hash值来求得对应数组中的位置。如何计算这个位置就是hash算法。前面说过hashmap的数据结构是数组和链表的结合,所以我们当然希望这个hashmap里面的元素位置尽量的分布均匀些,尽量使得每个位置上的元素数量只有一个,那么当我们用hash算法求得这个位置的时候,马上就可以知道对应位置的元素就是我们要的,而不用再去遍历链表所以我们首先想到的就是把hashcode对数组长度取模运算,这样一来,元素的分布相对来说是比较均匀的。但是,“模”运算的.原创 2022-02-23 10:42:54 · 562 阅读 · 0 评论 -
重写equals方法时必须重写hashcode方法吗
重写equals方法时必须重写hashcode有规范:1,当obj1.equals(obj2) 为 true 时,obj1.hashCode() == obj2.hashCode()2,当obj1.equals(obj2) 为 false 时,obj1.hashCode() != obj2.hashCode()原因:如果只重写了equals方法,出现了问题,两个对象equals方法比较为true,但是hashcode值不相等,违背了规范。hashmap中存储数据时,先调用hashCode原创 2022-02-22 13:43:34 · 1285 阅读 · 0 评论 -
equals方法变量和常量位置区别
对于字符串比较,我的习惯用法是 变量.equals(常量)比如: a.equals(“a”)今天看视频才知道变量在前面与后面有很大影响,正确的写法是常量放前面(可以避免变量为null引起的异常),变量放后面,则上面需要改为(“a”).equals(a)...原创 2022-02-22 11:32:02 · 328 阅读 · 0 评论 -
BigDecimal.setScale用法总结
ROUND_DOWN(直接省略掉指定位数后的内容)BigDecimal bigDecimal = new BigDecimal(“2.125456”).setScale(2, BigDecimal.ROUND_DOWN);System.out.println(bigDecimal ); //结果:2.12ROUND_UP(直接对指定位数后的内容做进一位处理)BigDecimal bigDecimal = new BigDecimal(“2.125456”).setScale(2, BigDe.原创 2022-02-18 15:34:14 · 639 阅读 · 0 评论 -
java 中 BigDecimal 详解
首先,我们先看一下,下面这个现象那为什么会出现这种情况呢?因为不论是float 还是double都是浮点数,而计算机是二进制的,浮点数会失去一定的精确度。注:根本原因是:十进制值通常没有完全相同的二进制表示形式;十进制数的二进制表示形式可能不精确。只能无限接近于那个值1、简介Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和原创 2022-02-18 14:44:57 · 444 阅读 · 0 评论 -
什么是函数式接口
函数式接口(functional interface 也叫功能性接口,其实是同一个东西)。简单来说,函数式接口是只包含一个方法的接口原创 2022-01-14 21:48:03 · 1475 阅读 · 0 评论 -
lambda表达式
使用 Lambda 表达式原因Lambda 是一个匿名函数,可以把 Lambda表达式 理解为是一段可以传递的代码 (将代码像数据一样进行传递)。可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升Lambda 表达式的基础语法 : Java8 中引入了一个新的操作符 “->” 该操作符称为箭头操作符或 Lambda 操作符,箭头操作符将 Lambda 表达式拆分成两部分 :左侧 : Lambda 表达式的参数列表右侧 : Lambda 表达式中所需执行的原创 2022-01-09 23:15:24 · 82 阅读 · 0 评论 -
try...catch的方式处理多个异常
try后面如果跟多个catch,那么小的异常放前面,大的异常放后面,根据多态的原理,如果大的放前面,就会将所有的子类对象接收,后面的catch就没有意义了原创 2021-12-29 11:44:41 · 1250 阅读 · 0 评论 -
什么是链式编程
链式编程 是将多个操作(多行代码)通过点号"."链接在一起成为一句代码。链式代码通常要求操作有返回值,原创 2021-12-28 14:48:36 · 900 阅读 · 0 评论 -
同一进程的多个线程可以被多个CPU核心并行执行吗?
一个进程中的多个线程可以被多个处理器并行执行。原创 2021-12-28 14:36:07 · 2441 阅读 · 0 评论 -
接口可以多继承吗
一个接口可以继承多个接口,例如:interface m extends intercls1,intercls2{}原创 2021-12-28 14:12:59 · 901 阅读 · 0 评论 -
java中extends ,implements的顺序问题
interface A {void fa();}class C implements A{void fa() {…}}假如现在有类D,它需要实现接口A,也要继承类C,当把extends放在前面,则类D会先继承C,再实现接口A,那么就不用再去实现fa()了,即class D extends C implements A{}若将extends 放在implements后面,那就要实现fa()方法了,但又继承类C,类c中也可fa()方法,此时就会出现问题!...原创 2021-12-27 14:01:45 · 843 阅读 · 0 评论 -
接口中不能有方法体吗-------不是
以前在比较接口与抽象类区别的时候,接口中不能有方法体是接口的一个特点。而最近的学习改变了这一特点。在JDK1.8以后是可以有方法体的,用default修饰即可、1、实现类会继承接口中的default方法2、如果一个类同时实现接口A和B,接口A和B中有相同的default方法,这时,该类必须重写接口中的default方法为什么要重写呢?是因为,类在继承接口中的default方法时,不知道应该继承哪一个接口中的default方法3、如果子类继承父类,父类中有b方法,该子类同时实现的接口中也有b方法(被原创 2021-12-23 13:52:05 · 1343 阅读 · 1 评论 -
什么是Java序列化,如何实现java序列化
简要解释: 序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。 序列化是为了解决在对对象流进行读写操作时所引发的问题。序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接原创 2021-12-23 11:54:52 · 1498 阅读 · 0 评论 -
java 查看变量类型
对于简单类型变量,是无法直接获得变量类型的;//要想获取,必须自定义函数进行返回对于包装类型变量,是可以直接获得的,变量名称.getClass().getName();java中获取变量的类型可以使用每个类型的getClass()方法来获得,示例如下class Test { public static void main(String[] args) { int i=1; //int类型变量System.out.println(getType(i)); //打印变量类型为int} pub原创 2021-11-30 10:54:54 · 7765 阅读 · 0 评论 -
Java中List集合去重的几种方式
利用HashSet去重// 利用list中的元素创建HashSet集合,此时set中进行了去重操作HashSet set = new HashSet(list);// 清空list集合list.clear();// 将去重后的元素重新添加到list中list.addAll(set);2、contains()方法去重// 创建一个新的list集合,用于存储去重后的元素List listTemp = new ArrayList();// 遍历list集合for (int i = 0;.原创 2021-11-29 14:03:01 · 152 阅读 · 0 评论 -
java变量只声明未初始化是否可以直接使用?
成员变量只声明未初始化在类初始化时会赋予默认值可以直接使用;局部变量必须赋值才可以使用,如果局部变量未赋值,编译无法通过。报错:把list的定义放到方法外面,定成全局变量就好了...原创 2021-11-29 11:31:51 · 1217 阅读 · 0 评论 -
java 定义一个未知长度数组
1、在java中可以通过变量表示数组的长度,定义数组的时候传递这个变量,new String[length],就可以在程序运行的时候动态定义一个数组下面是示例代码:public class Test { public static void main(String[] args) { String[] strArray = createArray(5); } static String[] createArray(int length) {原创 2021-11-29 11:24:15 · 13175 阅读 · 2 评论 -
java 自定义注解
如果没有default设置默认值,那么在使用的时候一定要赋值,不然报错原创 2021-11-26 17:16:35 · 82 阅读 · 0 评论 -
非静态方法可以调用静态变量吗
Java中非静态方法是可以调用静态方法与变量。静态方法和实例方法的区别是:1、在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式。而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。2、静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法,实例方法则无此限制。...原创 2021-11-26 13:57:01 · 3767 阅读 · 0 评论 -
不是说一个源程序中只能有一个public类?怎么内部类可以用public?
因为内部类作为外部类的一个成员而存在,类的成员可以用public修饰事实上内部类在访问修饰符方面如同普通的方法一样可以有public,private,protected,default四中访问方式原创 2021-11-26 13:53:44 · 417 阅读 · 0 评论 -
sleep()与wait()方法的区别
sleep是Thread类的方法,导致此线程暂停执行指定时间,给其他线程执行机会,但是依然保持着监控状态,过了指定时间会自动恢复,调用sleep方法不会释放锁对象。当调用sleep方法后,当前线程进入阻塞状态。目的是让出CPU给其他线程运行的机会。但是由于sleep方法不会释放锁对象,所以在一个同步代码块中调用这个方法后,线程虽然休眠了,但其他线程无法访问它的锁对象。这是因为sleep方法拥有CPU的执行权,它可以自动醒来无需唤醒。而当sleep()结束指定休眠时间后,这个线程不一定立即执行,因为此时其他原创 2021-11-25 23:11:25 · 175 阅读 · 0 评论 -
单例模式的五种写法
1、懒汉式,线程不安全顾名思义就是实例在用到的时候才去创建,“比较懒”,用的时候才去检查有没有实例,如果有则返回,没有则新建public class Singleton { private static Singleton instance; private Singleton (){} public static Singleton getInstance() { if (instance == null) { instance = new Sin原创 2021-11-10 10:04:56 · 105 阅读 · 0 评论 -
什么是javadoc文档
javadoc是Sun公司提供的一个技术,它从程序源代码中抽取类、方法、成员等注释形成一个和源代码配套的API帮助文档。也就是说,只要在编写程序时以一套特定的标签作注释,在程序编写完成后,通过Javadoc就可以同时形成程序的开发文档了1、首先在对应的Java文件位置进入命令行2、输入javadoc -encoding utf-8 -charset utf-8 Doc.java(文件名)3、在文件夹里会生成文件...原创 2021-11-09 21:07:49 · 179 阅读 · 0 评论 -
四种常用的注释
@Target({ElementType.TYPE})表示注解作用范围,超过这个作用范围,编译的时候就会报错@Retention(RetentionPolicy.RUNTIME)被描述的注解在什么范围内有效@Documented表明这个注解应该被 javadoc工具记录. 默认情况下,javadoc是不包括注解的. 但如果声明注解时指定了 @Documented,则它会被 javadoc 之类的工具处理, 所以注解类型信息也会被包括在生成的文档中,是一个标记注解,没有成员@Inherite.原创 2021-11-09 20:53:24 · 155 阅读 · 0 评论 -
什么是元数据?
关于数据的数据或者叫做用来描述数据的数据或者叫做信息的信息元数据可以为数据说明其元素或属性(名称、大小、数据类型、等),或其结构(长度、字段、数据列),或其相关数据(位于何处、如何联系、拥有者)。一个基本的元数据由元数据项目和元数据内容的构成。这里,“题名”就是它的元数据项目,“史蒂夫·乔布斯传 (美) 沃尔特·艾萨克森著 = Steve Jobs Walter Isaacson eng”就是元数据内容。再比如,“著者”、“出版者”都是元数据项目,而“艾萨克森 (Isaacson, Walter) 著原创 2021-11-08 10:08:42 · 172 阅读 · 0 评论 -
接口中的泛型要怎么写?
原创 2021-11-03 23:15:02 · 148 阅读 · 0 评论 -
静态代码块什么时候执行?
JVM加载类后且在构造函数执行之前执行,在类中可定义多个,一般在代码块中对一些static变量进行赋值静态块总是最先执行的,并且只有在创建该类的第一个实例的时候才会执行一次原创 2021-10-29 13:44:21 · 689 阅读 · 0 评论 -
普通类可以抛出异常吗
不可以自定义异常类即可,即EXception类的继承类原创 2021-10-29 09:59:12 · 150 阅读 · 0 评论 -
ArrayList的泛型可以不写吗
可以举例:private static void demo01() { ArrayList arrayList = new ArrayList(); arrayList.add("天才"); arrayList.add("第一步"); arrayList.add(1235); arrayList.add(true); Iterator iterator = arrayList.iterator();原创 2021-10-29 09:50:00 · 1105 阅读 · 0 评论