![](https://img-blog.csdnimg.cn/2021022409313731.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
java
文章平均质量分 75
覆盖java基础知识,java进阶知识
龙崎流河
沉淀
展开
-
ConcurrentHashMap简单了解
通过分段锁Segment实现,将锁一段一段存储,默认会分配16个segment,当一个线程占用一把锁segment访问其中一段数据的时候,位于其它segment的数据也能被其它线程同时访问,每个segment分配子数组,将hashmap数组逻辑上拆分成多个子数组,每个子数组配置一把锁,线程在获取到某把分段锁的时候才能操作该子数组,其它线程想要操作该子数组时只能被阻塞。ConcurrentHashMap比起Segment,锁拆的更细;CAS + synchronized使锁更细化;原创 2023-06-12 21:24:00 · 701 阅读 · 0 评论 -
hashmap的11连问
需要,否则就需要多次扩容,取2的幂次方,也就是128即可,因为2的幂次高位是1其余位置是0,当进行hash运算时,(n-1)&hash,n-1就是高位是0,低位都是1,这样&完之后,结果各个位置的取值取决于hash,如果不是2的整数次幂必然会有0位,0与任何&肯定为0,会造成更多的哈希冲突。红黑树是近似平衡的。0.75是为了触发扩容,减少冲突发生的概率,加载因子很大,扩容条件就会苛刻,hash碰撞概率变高,每个链表长度都很长,查询速度变慢,太小又会导致扩容频率变高,,内存消耗变大。原创 2023-06-12 16:06:24 · 638 阅读 · 0 评论 -
Collection,List接口相关介绍
ArrayList中维护了一个Object类型的数组elementData。transient Object[] elementData(transient 表示瞬间,短暂的,该属性不会被序列化)Vector是线程同步的,即线程安全的,Vector类的操作方法带有synchronized,在开发中需要线程同步安全时,考虑使用Vector。此时LinkedList的属性first = null last = null。Vector底层也是一个对象数组。原创 2023-04-08 16:56:53 · 338 阅读 · 0 评论 -
一篇文章让你面试畅谈HashMap,Hashtable,TreeSet,TreeMap
k-v为了方便程序员的遍历,还会创建EntrySet集合,该集合存放的元素的类型Entry,而一个Entry对象就有k,v,EntrySetentrySet中,定义的类型是Map.Entry,但是实际上存放的还是HashMap$Node,这是因为当把HashMap$Node对象存放到entrySet就方便我们的遍历,因为Map.Entry提供了重要方法javautil。原创 2023-04-08 01:21:36 · 374 阅读 · 0 评论 -
HashSet和LinkedHashSet底层分析
它是HashSet的子类底层是一个LinkedHashMap(HashMap的子类),底层维护了一个数组+双向链表(有head和tail),每个节点都有before和after属性,这样可以形成双向链表根据元素的hashcode值来决定元素的存储位置,同时使用链表维护元素的次序,这使得元素看起来是以插入顺序保存的我们遍历LinkedHashSet也能确保插入顺序和遍历顺序一致不允许添重复元素添加第一次时,直接将数组table扩容到16,存放的结点类型时LinkedHashMapEn。原创 2023-04-07 00:34:00 · 428 阅读 · 0 评论 -
四种二分查找法模板
【代码】四种二分查找法模板。原创 2022-11-08 19:20:23 · 124 阅读 · 0 评论 -
HashMap常用方法
【代码】HashMap常用方法。原创 2023-01-11 13:51:20 · 137 阅读 · 0 评论 -
Java的Deque容器
支持在两端插入和移除元素的线性集合。deque这个名字是“双端队列”的缩写,通常发音为“deck”。大多数 Deque 实现对它们可能包含的元素数量没有固定限制,但此接口支持容量受限的 deque 以及没有固定大小限制的元素。此接口定义访问双端元素的方法。提供了插入、删除和检查元素的方法。这些方法中的每一个都以两种形式存在:一种在操作失败时引发异常,另一种返回特殊值(null 或 false,具体取决于操作)。后一种形式的插入操作专门设计用于容量受限的 Deque 实现;原创 2023-01-11 13:43:57 · 134 阅读 · 0 评论 -
ArrayList源码分析
正式分析ArrayList源码。原创 2023-01-02 19:25:46 · 385 阅读 · 0 评论 -
LinkedList源码分析
从节点结构可以看出,LinkedList 属于双向链表,存储前驱和后继节点的引用。// 数据 E item;// 前驱,后继指针 Node < E > next;// 构造函数 Node(Node < E > prev , E element , Node < E > next) {} }头节点不存放数据..LinkedList 是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。原创 2022-12-31 16:33:25 · 822 阅读 · 0 评论 -
深拷贝和浅拷贝
深度克隆是把每一个对象都new一份到新的目标对象中,在要克隆的对象里面嵌套的非基本的数据类型和自定义对象都要进行克隆或者实现克隆的接口,当层次变多时实现起来就比较繁琐。还有最重要的一点是,所有的对象要想实现克隆,都必须要实现Cloneable方法和重写clone()方法。假设Teacher实现了Cloneable接口,里面的Student没有实现Cloneable接口的话,这两个Teacher是不相同的,但是里面的Student是相同的,所以需要对Student再度实现Cloneable接口;原创 2022-10-21 14:04:49 · 372 阅读 · 0 评论 -
数组中重复的数字
想求最优解,要擅于利用图中的条件,题目中说数组长度为n且数组中所有数字都在0-n-1范围内,可以用下标法,通过不停交换元素使得元素和它对应的下标相等,这样方便判断重复元素。找出数组中重复的数字,在一个长度为n的数组nums里的所有数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。也可以采用哈希表法,将数组中的元素存入哈希表中,当存入时发现哈希表有该元素则返回。可以采用排序法,将数组排序后,依次比较相邻元素,查看是否相等,相等就返回。...原创 2022-07-25 21:35:53 · 173 阅读 · 0 评论 -
java各种关键字
transientinstanceofjava的一个二元操作符,类似于==,>,<等操作符。它是java保留关键字,它的作用是测试它左边的对象是否是它右边的类的实例,返回布尔数据类型。package com.wzc.dao;import java.util.ArrayList;import java.util.Vector;import java.util.regex.Matcher;import java.util.regex.Pattern;public class Te原创 2021-05-05 22:52:49 · 161 阅读 · 0 评论 -
关于java没有引用传递而只有值传递
**形式参数:**是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数。**实际参数:**在调用有参函数时,主调函数和被调函数之间有数据传递关系。在主调函数中调用一个函数时,函数名后面括号中的参数称为“实际参数”。值传递:在调用函数时将实际参数赋值一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。引用传递:在调用函数时将实际参数的地址直接传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。为什么java中只有值传递?Java中的对象传递,原创 2021-05-04 21:29:20 · 319 阅读 · 1 评论 -
关于String
字符串不可变性一旦一个string在堆中被创建,它就无法被修改。String类的所有方法都没有改变字符串本身的值,都是返回了一个新的对象。如果需要一个可修改的字符串,应该使用StringBuffer或者StringBuilder,否则会有大量时间浪费在垃圾回收上,因为每次修改都有新的string对象被创建出来。图解:String s = “abcd”;s保存了string对象的引用String s2 = s;s2保存了相同的引用值,因为他们代表同一个对象。s = s.concat(“ef”原创 2021-05-04 17:13:47 · 199 阅读 · 1 评论 -
关于自动拆装箱
自动拆装箱基本数据类型有什么好处:在java语言中,new一个对象存储在堆里,通过栈中的引用来使用这些对象,所以对象本身来说是比较耗资源的,对于经常使用到的类型,如int等,若我们每次使用这种变量时都需要new个java对象会显得很笨重,因此提供了基础数据类型,无需使用new创建,他们不会在堆上创建,而是直接在栈内存中存储,会更加高效。但由于java是一个面向对象的语言,java的基本数据类型不面向对象,这在实际使用中会有不足(比如集合类,我们无法将int,double等类型放进去,因为集合容器要求原创 2021-05-02 22:29:06 · 92 阅读 · 0 评论 -
多态&继承&一些java的基础知识
字符型常量和字符串常量的区别?1.字符串是单引号引起的一个字符,字符串常量是双引号引起的若干字符包括0.2.字符常量相当于一个整形值(ASCII值),可以参加表达式运算;字符串常量代表一个地址值(该字符串在内存中存放位置)3.字符常量只占两个字节(char在java中占两个字节),字符串常量占若干个字节java要确定每种基本类型所占存储空间的大小,它们的大小不像其他大多语言那样随机器硬件架构的变化而变化,所占存储空间的不变性是java程序比用其他大多语言编写的程序更具有可一致性的一个原因。八种基本原创 2021-04-27 21:04:44 · 109 阅读 · 0 评论 -
关于java的jdk&jre&jvm
java语言的特点简单易学(相比于c语言)面向对象(封装继承多态)平台无关性(java虚拟机实现平台无关性)可靠性安全性支持多线程(c++2011年以前没有内置多线程机制,因此需调用操作系统的多线程功能记性多线程程序设计,java却提供多线程支持)支持网络编程而且很方便(因为java诞生本身就是为了简化网络编程设计的,因此java不仅支持网络编程而且很方便)编程与解释并存jvm&jdk&jreJVM是运行java字节码的虚拟机,jvm有针对不同系统的特定实现,目的是使原创 2021-04-26 22:37:24 · 231 阅读 · 0 评论 -
异常
异常就是程序出现了不正常的情况。异常体系:1,Error:严重问题,不需要处理。2,Exception:异常类,表示程序本身可以处理的问题。RuntimeException:在编译期是不检查的,出现问题后,需要我们回来修改代码。非RuntimeException:编译期就必须处理的,否则程序不能通过编译,就更不能正常运行了。**JVM默认处理方案:**把异常的名称,异常的原因以及异常的位置等信息输出在了控制台,程序停止执行下程序可见,method出现异常,后面的语句没有执行。packag原创 2021-04-07 13:38:28 · 120 阅读 · 1 评论 -
java反射
反射机制java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息和动态调用对象的方法的功能称为java语言反射机制。优点:可以在程序运行过程中,操作这些对象,动态加载类,可以解耦,提高代码灵活性。(反射是框架的灵魂)缺点:反射相当于一系列解释操作,通知JVM要做的事,性能比直接的java代码要慢的多,并且动态操作改变类的属性同时增加安全隐患。框架是半成品软件,可以在框架的基础上进行软件开发,简化编码。反原创 2021-04-01 23:16:36 · 336 阅读 · 0 评论