HashMap原理与细节
HashMap概述简介Java为数据结构的映射定义了一个接口java.util.Map,其中有四个常用实现类:HashMap、HashTable、LinkedHashMap和TreeMap。
HashMap:根据键的hashCode值存储数据,允许一条记录的键为null,访问速度快,遍历顺序不稳定。HashMap线程不安全,并发环境可以使用Collections的syncronizedMap方法将它包装为线程安全的Map但是更推荐使用ConcurrentHashMap。JDK8以前HashMap使用数组+链表的数据结构,而JDK8之后引入了红黑树结构,查找时间复杂度为O(logn),当链表长度大于8并且数组长度大于64时会将链表转为红黑树。
LinkedHashMap:LinkedHashMap是HashMap的一个子类,通过加入双向链表保证了遍历的有序性。
Hashtable:Hashtable功xd能与HashMap类似,不同点是它继承Dictionary类,因此键值都不允许null,它直接对方法添加synchronized,是线程安全的。
TreeMap:TreeMap实现So ...
【CompletableFuture详解】换一种理解角度 - 被忽略的函数式接口
CompletableFuture前言很多文章在介绍CompletableFuture时都是照功能将方法划分为不同类型,直接解释具体方法的使用规则。可如果你本就英语不好,看到几个差不多的单词排列组合成几十种方法是不是头皮发麻了?又或者你经常搞混或忘记相似方法,实战根本不知道怎么用。进一步讲,当嵌套了多组括号和回调,且由于不同方法的入参和返回值不同,经常代码检查报错摸不着头脑。
如果你有这些感觉,那么看完本文对你一定会有收获。本文不会直接告诉你那么多API具体如何使用,而是教会你如何高效区分和掌握不同API的用法。
简介JDK8中新增了CompletableFuture类作为异步任务编排的解决方案,它可以被认为是Future的扩展,采用了函数式编程思想简化了任务编排和回调地狱,本文的CompletableFuture会以JDK8为准。
函数式接口如何做到快速掌握用法?其实很简单,就是被忽略的函数式接口。很多文章认为直接把方法翻译为具体功能更简单易懂,其实不然,其听我慢慢道来。
我们先来看看thenCombine方法的声明:
12345public <U,V> Completa ...
Markdown测试
Java代码块123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657/* Block comment */import java.util.Date;import static AnInterface.CONSTANT;import static java.util.Date.parse;import static SomeClass.staticField;/** * Doc comment here for <code>SomeClass</code> * @param T type parameter * @see Math#sin(double) */@Annotation (name=value)public class SomeClass<T extends Runnable> { // some comment private T field = null; priva ...