![](https://img-blog.csdnimg.cn/20190918140129601.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
java基础
java基础
ZtCling
热爱代码,欢迎交流
展开
-
Hashmap中的扩容操作reisze()方法
一.何时会发生resize()扩容1.初始化HashMap的默认扩容一个 cap为16 ,threshold(阈值)为12的Node<K, V>[] newTab2.HashMap中元素数量达到阈值,每次扩容的容量都是之前容量的2倍。。二.resize()扩容的大致流程第一步: 确定新数组的 容量 和阈值(极限值/临界值)第二步:将旧数组内容 复制到 新数组 当中(扩容的本质是 新数组替代旧数组)注意:在对链表进行拆分的时候,会分为两个链表,因为数组扩容后长度是原来的二.原创 2022-05-07 15:16:27 · 797 阅读 · 0 评论 -
HashMap中put方法(白话加源码分析)
一.首先不看代码用白话分析一下流程我们在使用put方法的时候会传进key和value参数在我们将这两个参数传入后,第一步,我们的put方法会去判断这个hashmap是否为null 或者长度是否为0,如果是则对hashmap数组进行resize()扩容,第二步,put方法会根据这个key计算hash码来得到数组的位置,(这里需要解释一下,我们的hashmap默认是由一个数组加链表组成的)得到位置后当然是继续判断这个数组下标的值是否为null,为null 自然是直接插入我们的value值,如原创 2022-05-06 18:36:55 · 9429 阅读 · 3 评论 -
伪异步I/O编程
采用线程池和任务队列可以实现伪异步I/O编程实现原理:当客户端接入时,将客户端的Socket封装成一个Task( 该任务实现java.lang.Runable线程任务接口)交给后端的线程池中进行处理。JDK 的线程池维护一个消息队列和 N 个活跃线程,对消息队列中的任务进行处理。由于线程池可以设置消息队列的大小和最大线程数,因此,它的资源占用是可控的,无论多少个客户端并发访问,都不会导致资源的耗尽和宕机。代码实例:用伪异步io的方法实现通信1)首先构建服务器端//目标:实现伪异步性能架原创 2022-04-25 18:08:55 · 318 阅读 · 0 评论 -
Java BIO,NIO,AIO 概述
在学习I/O之前我们先要了解两组概念同步和异步当你同步执行某项任务时,你需要等待其完成才能继续执行其他任务。当你异步执行某些操作时,你可以在完成另一个任务之前继续进行。 同步 :两个同步任务相互依赖,并且一个任务必须以依赖于另一任务的某种方式执行。 比如在A->B事件模型中,你需要先完成 A 才能执行B。 再换句话说,同步调用中被调用者未处理完请求之前,调用不返回,调用者会一直等待结果的返回。 异步: 两个异步的任务是完全独立的,一方的执行不需要等待另外一方的执行。再换句话说,原创 2022-04-25 14:12:23 · 297 阅读 · 0 评论 -
Java contains用法示例
contains方法:用于判断list集合是否包含某个元素containsKey方法:用于判断Map键中是否包含某个键containsValue方法:用于判断map中是否包含某个value值代码示例:package ceshi;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;class index { public static原创 2022-04-08 16:32:42 · 698 阅读 · 0 评论 -
Java HashMap getOrDefault() 方法
1.getOrDefault() 方法获取指定 key 对应对 value,如果找不到 key ,则返回设置的默认值。2.getOrDefault() 方法的语法为 :hashmap.getOrDefault(Object key, V defaultValue)注:hashmap 是 HashMap 类的一个对象参数说明:key - 键 defaultValue - 当指定的key并不存在映射关系中,则返回的该默认值3.示例:package ceshi;import原创 2022-04-08 10:25:08 · 1105 阅读 · 0 评论 -
java中的append()方法
1.Stringbuffer 有append()方法2.Stringbuffer其实是动态字符串数组 (StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象)3.append()是往动态字符串数组添加,相当于“xxxx”+“yyyy”相当那个‘+’号4.跟String不同的是Stringbuffer是放一起的String1+String2 和Stringbuffer1.append("yyyy")虽然打印效果一样,但在内存中表示却不一...原创 2022-04-05 10:26:19 · 13508 阅读 · 0 评论 -
Java中Collections类方法常用合集
目录1.Collections.sort(list);2.Collections.reverse(list)3.Collections.shuffle(list)4.Collections.swap(List list,int i,int j)5.Collections.fill(List list,Object o)6.Collections.copy(List lsit,List lsit2)6.Collection.min(list)7.Collection....原创 2022-03-27 16:35:20 · 2023 阅读 · 0 评论 -
JAVA实现静态代理
1.何为代理?为对象包装一个代理,使得这个代理可以控制对目标对象的访问。外界通过代理对象间接访问目标对象。通俗讲就是使用一个代理类对原有方法进行增强。2.何为静态代理?代理对象拥有目标对象的句柄。所有调用目标对象的方法,都通过调用代理对象来实现。对于每一个目标对象的方法,都需要静态编码。即在代理对象中实现 3....原创 2022-03-15 12:52:49 · 831 阅读 · 0 评论 -
论暴力反射
使用场景:如果构造方法、普通方法、字段 被private(私有)修饰,默认情况下,在该类的外部是不允许被访问的,如果使用暴力反射,即使被private修饰也可以进行操作。示例:(name.setAccessible(true)设置可访问为true,这就是暴力反射的核心,即使是私有字段也强行把你反射了)...原创 2022-03-11 12:44:43 · 393 阅读 · 2 评论 -
Java中的值传递
一.值传递的定义: 值传递是指在调用函数时将实际参数复制一份传递到函数中的形式参数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。(java中只有值传递)二.示例:代码:执行结果:分析: 由执行结果可见,虽然在hand中写了a,b的值进行互换的方法,但实际上a,b的值并没有进行改变,在传值调用中,实际参数a,b先被求值,然后其值通过复制,被传递给被调函数的形式参数。因为形式参数拿到的只是一个"局部拷贝",所以如果在被调函数中改变了形式参数的值,并...原创 2022-03-10 11:30:07 · 1214 阅读 · 3 评论 -
Java中final、finally、finalize的区别
final:java中关键字,修饰符1.如果一个类被声明为final,则表明它不能被派生出新的子类,不能作为父类被继承。由此可知一个类不能同时被声明为final和absrtact2.如果将final修饰一个变量或方法,则可保证他们不会在使用中被改变2.1.final修饰的变量需要有一个初始值,在之后的引用中只能读取无法改变2.2.被final修饰的方法只能使用不能重载finally:java的一种异常处理机制 finally是对Java 异常处理模型的最佳补...原创 2022-03-09 22:41:17 · 133 阅读 · 0 评论 -
128陷阱
指的是两个Integer对象直接用==判定在某个范围内返回为true 在(-128,127)范围内为true当Ingeter与int比较时为true,因为拆箱总比装箱性能好(装箱要构建新的对象浪费空间)integer默认做了自动拆箱的处理源码角度分析: 在自动装箱的方法中,由源码可知先判断了i是否存在于IntegerCache中的cache数组中,如若存在则直接返回数组中的值,若不存在则构建一个新的Integer对象界定了cac...原创 2022-03-09 13:36:20 · 152 阅读 · 0 评论 -
自动拆装箱问题
每个基本类型都有其对应的包装类java中所有的提供给我的集合类(set,list,map) 都需要存入对象int a = 3;a此时不是一个对象,而是一个变量基本类型和包装类型的相互转换拆箱Integer a = new Integer(20);int b = a;等价于int b =a.intValue();inValue()为自动拆箱的方法装箱Integer c = 20;等价于Integer b =Integer.valueOf(20);Integer.原创 2022-03-09 13:05:21 · 241 阅读 · 0 评论 -
关于Spring Aop
一.简介在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。Aop是oop的一种延续,是软件开发的一种热点,也是spring框架的一个重要内容,是函数式编程的一种衍生泛型。利用Aop可以对程序的各个部分进行隔离,从而使业务逻辑各个部分之间耦合度降低,可提高程序的重复用性,同时提高了开发的速率。二.常用场景日志打印&日志框架1. 入参打印用户,时间,哪个方法,传了哪个参原创 2022-02-07 21:51:12 · 118 阅读 · 0 评论 -
理解String和StringBuffer和StringBuilder
1.java提供了三种类 String和StringBuffer和StringBuilder 来对字符串进行封装2.String为字符串常量,StringBuffer、StringBuilder均为字符串变量。即:String对象创建后是不可以更改的3.StringBuffer与StringBuilder都提供了一系列插入、追加、改变字符串里的字符序列的方法,它们的用法基本相同,只是StringBuilder是线程不安全的,StringBuffer是线程安全的,。如果只是在单线程中使用字符串缓冲区,原创 2021-12-30 23:18:32 · 141 阅读 · 0 评论