【转载】Java 8系列之重新认识HashMap

最后修改于: 2016-08-04 21:50:09.0

之前看HashMap源码,JDK8过于复杂,于是看了一下JDK7的实现,今天刚好看到这篇JDK8与JDK7的HashMap对比。


作者:美团点评技术团队
链接:https://zhuanlan.zhihu.com/p/21673805
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Map源码笔记之TreeMap

最后修改于: 2016-04-11 00:19:24.0

TreeMap比较简单,在JDK8和JDK7中差别很小,所以这次看的是JDK8的TreeMap实现。TreeMap的声明如下:

public class TreeMap<K, V> extends AbstractMap<K, V> implements
		NavigableMap<K, V>, Cloneable, java.io.Serializable {
	……
}

其中NavigableMap实现了SortedMap接口,并增加了一下按序访问的方法,比如lowerKey(K),higherKey(K),pollFirstEntry()等。

Map源码笔记之ConcurrentHashMap(JDK7)

最后修改于: 2016-04-03 14:48:47.0

之前看了HashMap的源码,而对于ConcurrentHashMap,在并发编程实战那本书中有一点了解,知道它使用了分段锁等手段提高并发性能,并且数据具有弱一致性等特点,不过毕竟还是应该看看源码才是最好。

然而打开源码我就蒙了,6000多行,找到一些关键方法看一看发现跟网上看过的一些文章讲得完全不一样啊。这时我想起之前看HashMap的源码也是这样,中文网络上大多都是JDK6的源码分析,而在JDK8中有很大的改动。于是下载了一份JDK7的源码,找到ConcurrentHashMap打开一看,1600行,好感人,JDK8真是丧心病狂。所以先就针对JDK7的实现来学习一下,之后有精力再看看JDK8那6000多行的实现到底是怎么回事。。。

Map源码笔记之HashMap-1

最后修改于: 2016-04-02 22:24:40.0

今天看了一下JDK8与JDK7的HashMap,居然JDK8的代码量翻了一倍,丧病。

===================================================================

看了一下HashMap,感觉比较复杂,可能一篇是写不完的,先写一些重要的。

一、静态常量和Node

    /**
     * The default initial capacity - MUST be a power of two.
  

StringBuilder和StringBuffer

最后修改于: 2016-03-17 22:39:41.0

之前粗略地看过了String,还没有仔细研究,接下来准备把StringBuilder和StringBuffer也都先大致看一下,有一个总体的对比理解先。

1、先看StringBuilder的声明:

public final class StringBuilder
    extends AbstractStringBuilder
    implements java.io.Serializable, CharSequence
{
    ……
}

首先StringBuilder继承了AbstractStringBuilder,并且StringBuffer也是继承自这个

String源码笔记-2

最后修改于: 2016-03-04 18:23:41.0

1、来说一下split方法:

一般常用的好像是public String[] split(String regex)这个方法,不过在String里面实际上这个方法调用的是

public String[] split(String regex, int limit)

Limit=0的情况。这个带limit参数的方法大体上是:

        char ch = 0;
        if (((regex.value.length == 1 &&

String源码笔记-1

最后修改于: 2016-03-01 21:05:19.0

String中用了很多charcharArray[]这样的定义,看来是早期写法。

1、类定义:

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence

2String内部把字符存在private final char value[]里,直接就定义了Final

3、无参数构造器

public String() {        this

关于我

男,1991年末出生,这个人很懒,其他的不想写了。
More about me

文章分类

其他玩意儿