Java基础
文章平均质量分 94
风幕浦
通过此博客平台来分享我踩过的坑和一些学习心得,记录我一步步成长的历程,共勉……
展开
-
ConcurrentHashMap如何保证线程安全及源码解析
1. ConcurrentHashMap 和 HashMap 两者的异同相同之处:数组、链表结构几乎相同,所以底层对数据结构的操作思路是相同的(只是思路相同,底层实现不同);都实现了 Map 接口,继承了 AbstractMap 抽象类,所以大多数的方法也都是相同的,HashMap 有的方法,ConcurrentHashMap 几乎都有,所以当我们需要从 HashMap 切换到 ConcurrentHashMap 时,无需关心两者之间的兼容问题。不同之处:红黑树结构略有不同,HashMap原创 2021-04-14 15:04:16 · 621 阅读 · 0 评论 -
告别996之Stream学习总结
Stream是Java8最大的亮点,它是对集合对象功能的增强,专注于对集合对象进行各种高效的数据处理,Stream API借助于lambda表达式极大的提高了编程效率及程序的可读性,同时Stream提供串行和并行两种模式进行汇聚操作,并行模式可以充分利用多核处理器的优势。结合lambda表达式及Stream API可以很方便的编写高性能并发程序。 在操作数据库时,S原创 2020-06-17 17:36:19 · 1975 阅读 · 0 评论 -
Lambda 表达式原来是这样用的
文章目录一、 概述二、 常见用法2.1 无参函数的简写2.2 单参函数的简写2.3 多参函数的简写三、方法引用3.1 引用静态方法3.2 引用对象的方法3.3 引用类的方法3.4 引用构造方法四、自定义函数接口五、实现原理5.1 匿名内部类的实现5.2 Lambda 表达式的实现六、优缺点本文将介绍 Java 8 新增的 Lambda 表达式,包括 Lambda 表达式的常见用法以及方法引用的用法,并对 Lambda 表达式的原理进行分析,最后对 Lambda 表达式的优缺点进行一个总结。一、 概述J原创 2020-05-28 23:48:29 · 155 阅读 · 0 评论 -
String、Long 源码解析和面试题
引导语String 和 Long 大家都很熟悉,本小节主要结合实际的工作场景,来一起看下 String 和 Long 的底层源码实现,看看平时我们使用时,有无需要注意的点,总结一下这些 API 都适用于哪些场景。1 String1.1 不变性我们常常听人说,HashMap 的 key 建议使用不可变类,比如说 String 这种不可变类。这里说的不可变指的是类值一旦被初始化,就不能再被改变了,如果被修改,将会是新的类,我们写个 demo 来演示一下。String s ="hello";s ="w原创 2020-05-28 22:57:53 · 355 阅读 · 0 评论 -
String常用方法及部分源码分析
1.int length();语法:字符串变量名.length();返回值为 int 类型。得到一个字符串的字符个数(中、英、空格、转义字符皆为字符,计入长度)/** The String is used char value[] **/public int length() { return value.length; } /** The value is used for character storage. */private final char value原创 2020-05-28 20:45:06 · 477 阅读 · 0 评论 -
ConcurrentHashMap源码解析(每行都有完整解析)
为什么HashMap和ConcurrentHashMap的链表数目>=8才转换成红黑树?为什么<=6才从树转换成链表?当hashCode离散性很好的时候,树型转化用到的概率非常小,因为数据均匀分布在每个桶中,几乎不会有桶中链表长度会达到阈值。但是在随机hashCode下,离散性可能会变差,然而JDK又不能阻止用户实现这种不好的hash算法,因此就可能导致不均匀的数据分布。不过理想...原创 2020-05-14 18:25:19 · 171 阅读 · 0 评论 -
Map集合常用方法及常用遍历方式
一:在for循环中使用entries实现Map的遍历(在键值对都需要使用)/*** 最常见也是大多数情况下用的最多的,一般在键值对都需要使用 */Map <String,String>map = new HashMap<String,String>();map.put("k1", "v1");map.put("k2", "v2");for(Map.Entry&...原创 2020-03-21 19:32:29 · 315 阅读 · 0 评论 -
int和integer之间的比较(笔试题)
int和integer之间的比较(笔试题)1. int与integer之间的比较int和integer之间的比较就是数值之间的比较,只要数字相等比较结果就为true(依赖于自动装箱与拆箱的机制)2.integer之间的比较Integer i2;Integer.valueOf(int i);:这个方法赋值分两种情况,当i的区间在 [-127,127] 之间时,时在常量池中直接获取数...原创 2019-12-20 15:32:20 · 574 阅读 · 1 评论 -
JVM笔记(对象的结构、内存模型、垃圾回收算法、垃圾回收器)
JVM内存区域1. 程序计数器线程私有的,可以看作是当前线程说执行的字节码的行号指示器, 保存的是程序当前执行的指令的地址(也可以说保存下一条指令的所在存储单元的地址) ,保证每个线程都在线程切换后能够恢复在切换之前的程序执行位置 。在JVM规范中规定,如果线程执行的是非native方法,则程序计数器中保存的是当前需要执行的指令的地址;如果线程执行的是native方法,则程序计数器中的值...原创 2019-12-17 09:42:33 · 315 阅读 · 0 评论 -
Java中各种锁机制的介绍
本文内容在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类。介绍的内容如下:1.公平锁 / 非公平锁2.可重入锁 / 不可重入锁3.独享锁 / 共享锁4.互斥锁 / 读写锁5.乐观锁 / 悲观锁6.分段锁7.偏向锁 / 轻量级锁 / 重量级锁8.自旋锁上面是很多锁的名词,这些分类并不是全是指锁的状态,有的指锁的特性,有的指锁的设计,下面总结的内容...原创 2019-12-13 09:48:35 · 260 阅读 · 0 评论 -
线程池原理及常用线程池介绍
线程池概述:就是把一堆线程创建好了放在一个容器中(池子里),需要用的时候就直接拿出来用,用完之后再放回池子里。线程池的好处:降低资源消耗,降低了频繁创建线程和销毁线程的开销提高响应速度提高线程的可管理性,可以对线程进行一些操作,方便管理线程线程池的图解:线程池的运行过程:线程池家族线程池的最上层接口是Executor,这个接口定义了一个核心方法execute(Runn...原创 2019-12-12 16:12:54 · 1119 阅读 · 2 评论 -
Java中String和Byte[]互转
string转化为byte[]数组String str = "abcd";byte[] bs = str.getBytes();byte[]数组转化为string字符串/*String str1 = "abcd";byte[] bs1 = str1.getBytes();*///通过String的构造方法直接可以转byte[] bs1 = {97,98,100};String s...原创 2019-11-09 17:41:01 · 187 阅读 · 0 评论