java8
东纪元
这个作者很懒,什么都没留下…
展开
-
Java HashMap putVal 源码中(n - 1) & hash是什么意思?
1、在保证容量都是2的幂次时,(n - 1) & hash相当于取余操作(这就是HashMap容量都是2次幂的原因了,是一种优化)即:(n - 1) & hash = hash % n2、位运算比取余操作快(大概十倍)原创 2021-09-03 11:25:09 · 1064 阅读 · 0 评论 -
关于Java8 Optional的使用场景
https://mp.weixin.qq.com/s/mfoVkcAaxmNjNPn8ofigFg原创 2020-02-12 13:15:51 · 1315 阅读 · 0 评论 -
Java8 获取Lambda表达式是由哪个类来的(比如Lambda函数接口使用的是哪个类的方法引用)
一、(1)获取Lambda表达式来自于哪个类的..Java8 lambda函数接口如果继承了Serializable这个接口,那么把lambda函数的实例对象序列化成字节,然后再使用ObjectInputStream反序列化成一个对象,此时反序列化获得的对象是SerializedLambda类型的一个实例,通过这个SerializedLambda实例对象,可以获取到lambda表达式是由哪个类调用过来的。(2)例子:比如A::getB这个lambda表达式,底层接收的函.原创 2020-11-11 13:52:21 · 744 阅读 · 1 评论 -
java 多线程面试复习
https://blog.csdn.net/qq_35190492/article/details/104691668?depth_1-utm_source=distribute.pc_feed.none-task&request_id=&utm_source=distribute.pc_feed.none-task转载 2020-03-09 22:47:37 · 141 阅读 · 0 评论 -
自定义类加载器的一些问题
一、同一个类文件被不同类加载器加载,它们的Class对象不相等。执行主类代码如下:import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;/** * @Author 周利东 * @Date: 2019/1/18 9:47 */public class ...原创 2019-01-18 18:38:20 · 388 阅读 · 0 评论 -
LinkedHashMap 源码详细分析(JDK1.8)
转载自 https://www.tianxiaobo.com/2018/01/24/LinkedHashMap-源码详细分析(JDK1-8)/1. 概述LinkedHashMap 继承自 HashMap,在 HashMap 基础上,通过维护一条双向链表,解决了 HashMap 不能随时保持遍历顺序和插入顺序一致的问题。除此之外,LinkedHashMap 对访问顺序也提供了相关支持。在一些...转载 2019-01-15 11:04:04 · 150 阅读 · 0 评论 -
Java ConcurrentHashMap
Java7 中实现的 ConcurrentHashMap 说实话还是比较复杂的,Java8 对 ConcurrentHashMap 进行了比较大的改动。建议读者可以参考 Java8 中 HashMap 相对于 Java7 HashMap 的改动,对于 ConcurrentHashMap,Java8 也引入了红黑树。说实话,Java8 ConcurrentHashMap 源码真心不简单,最难的在...转载 2019-01-15 16:36:40 · 440 阅读 · 0 评论 -
ReentrantLock公平锁与非公平锁
下面是高洪岩的java多线程编程书中原文。下面这段话转载自https://blog.csdn.net/rickiyeat/article/details/78307739前言 最近开始读JDK源码,所有心得准备总结成一个专栏,JDK Analysis系列的第一篇,就从万众瞩目的ReentrantLock开始吧,而谈到ReentrantLock,就不得不说AQS,它是AbstractQ...转载 2019-01-30 14:26:23 · 142 阅读 · 0 评论 -
java8 list根据元素的某个字段或者根据元素的多个字段去重(多种方式)
本例子使用的实体类如下:class Person { private String name; private int age; //省略getter/setter/toString}第一种去重方式:java8利用Collectors.toMap去重 List<Person> personList = new Arra...原创 2019-04-10 15:12:59 · 30258 阅读 · 6 评论 -
Java8中计算日期时间差
https://blog.csdn.net/hspingcc/article/details/73332526转载 2019-09-26 18:54:35 · 147 阅读 · 0 评论 -
关于Map中的put方法返回值,以及putIfAbsent方法的使用
众所周知,Map是根据key进行增删改查的,然后......一、put方法:返回值:返回该key对应的旧的value,如果map中原本没有这个key对应的entry,那么就返回null。如果还不明白,那拆解为下面两步理解:(1)如果map中不存在该key,那么put该key时返回的是null(2)如果map中已经存在该key,那么put该key-value时返回的是旧的valu...原创 2019-01-18 10:18:19 · 11783 阅读 · 0 评论 -
1.8 HashMap文字描述(复习)
1、查找(1)通过hash求余找到相应的桶,如果桶的节点是是链表节点则(2),如果是红黑树节点则(3)(2)遍历链表比较hash,和通过equals比较,找到相等的(3)红黑树的查找,和二分搜索树没什么差别,也是通过key的hash和equals找到相等的2、插入(1)当桶数组 table 为空时,通过扩容的方式初始化 table(2)如果桶中没有任何节点,则新插入节点直接...原创 2019-01-11 14:40:45 · 204 阅读 · 0 评论 -
java string 常量池问题
字符串相加,只要有变量参与的,那么就不会使用常量池里的字符串引用。如果是String s3 = "ab";String s5 = "a" + "b";这种在相加过程中没有变量参与的字符串参加,会使用常量池。所以,s3 == s5的值是true。反正别的不多说,具体看程序,看了下面的,那一切都懂了(基于jdk1.8) String s1 = "a"; String s...转载 2018-05-21 12:07:06 · 208 阅读 · 0 评论 -
java lambda表达式与匿名内部类不是等价关系,lambda不仅仅是语法比匿名内部类更简便
区别之一:匿名内部类使用无限定的this,这个this指的就是该匿名内部类对应的实例。而lambda表达式使用无限定的this,这个this却是外部类的实例。有限定的this即指定某个外部类的this,无限定就是没有指定是哪个外部类的this。不理解?看代码....匿名内部类的代码public class Hello {Hello hello = this;Runnab...原创 2018-07-09 11:17:56 · 968 阅读 · 0 评论 -
java 泛型通配符与super、extends使用的相关问题原理
class A{}class B extends A{}class C extends B{}class D extends C{}class E extends D{}一、 super,读和写数据都支持。(1)写数据时要写下界或者下界类型的子类,这里是C或者C的子类。(2)读数据时获取的只能是Object的对象,要自己把该对象强制转换为自己的类型。。不过获取数据时一般不知...原创 2018-08-08 20:57:29 · 299 阅读 · 0 评论 -
java8 lambda表达式方法引用
比图Integer::intValue,作为函数传递。。。这就是方法引用Function接口的只有一个抽象方法,即:R apply(T)当使用Function作为方法参数时,如下:public <R> R map(Function<T, R> function) { return function.apply(t);}调用该方法的时候,传递的是I...原创 2018-11-26 13:27:08 · 1701 阅读 · 1 评论 -
java8 stream中的Collectors的使用
public static void main(String[] args) { @AllArgsConstructor @Data class User{ private String name; private Integer score; } User user1 = new User("zhangsan", 60)...转载 2018-12-12 22:57:46 · 2577 阅读 · 0 评论 -
java8 stream的collect 三个参数
collect方法有两个重载:第一个接收的是Collector类型的,可以直接用Collectors这类工具传方法引用。 第二个接收的是三个参数的,supplier:一个能创造目标类型实例的方法。accumulator:一个将当元素添加到目标中的方法。combiner:一个将中间状态的多个结果整合到一起的方法(并发的时候会用到)。接着看代码:Stream stream = St...原创 2018-12-13 10:28:16 · 5364 阅读 · 1 评论 -
java8 stream的parallelStream并行原理猜测(没看过源码)
以原始数据是List为例,stream并行的原理难道就是:一、根据collect第一个参数创建一个List实例(最终得到的也是这个)。一、把stream的原始list数据划分为N块,然后分别交给N个线程。二、每个线程根据自己得到的那块list数据执行相应操作,每个线程一开始也是使用collect传进来的第一个函数创建新的List实例,然后使用collect的第二个函数消费当前线程需要处...原创 2018-12-13 10:29:25 · 1043 阅读 · 0 评论 -
ArrayList 源码理解
扩容机制:源码如下:minCapacity:最小需要的容量,也就是说存储数据的数组最小需要minCapacity所指定小长度。private void ensureExplicitCapacity(int minCapacity) { modCount++; // overflow-conscious code if (minCapacity - eleme...原创 2018-12-14 09:15:57 · 162 阅读 · 0 评论 -
HashMap 源码详细分析(JDK1.8)
转载自https://segmentfault.com/a/1190000012926722#articleHeader61.概述本篇文章我们来聊聊大家日常开发中常用的一个集合类 - HashMap。HashMap 最早出现在 JDK 1.2中,底层基于散列算法实现。HashMap 允许 null 键和 null 值,在计算哈键的哈希值时,null 键哈希值为 0。HashMap 并不保证...转载 2019-01-11 10:05:45 · 247 阅读 · 0 评论 -
java8 lambda表达式以及@FunctionInterface注解
lambda表达式1、如果形参列表是空的,只需要保留()即可2、如果没有返回值。只需要在{}写执行语句即可3、如果接口的抽象方法只有一个形参,()可以省略,只需要参数的名称即可4、如果执行语句只有一行,可以省略{},但是如果有返回值时,情况特殊。5、如果函数式接口的方法有返回值,必须给定返回值,如果执行语句只有一句,还可以简写,即省去大括号和return以及最后的;号。(如果要...原创 2018-05-13 09:54:48 · 3681 阅读 · 0 评论