- 浏览: 98592 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (48)
- ruby (7)
- scala (1)
- java (11)
- jython (1)
- python (1)
- life (0)
- jruby (1)
- javascript (1)
- 翻译 (0)
- lua (2)
- SUSE (1)
- scheme (6)
- amb (1)
- 编译器 (0)
- javaee (1)
- 分布式 (0)
- 并发 (1)
- 杂感 (1)
- IO (0)
- POJO (0)
- EJB (0)
- concurrent (0)
- 算法 (1)
- ibm (0)
- JNI (0)
- AOP (0)
- asm (0)
- Groovy (1)
- agent (0)
- instrument (0)
- manifest (1)
- classloader (0)
- jboss (0)
- code (0)
- OSGI (0)
- 庄子 (0)
- JTA (0)
- SA (1)
- clojure (0)
- collections (0)
- hotswap (0)
- 序列化 (0)
- CORS (0)
- 停机 (0)
- JVM (0)
- parallel (0)
- NIO (0)
- weblogic (0)
- transaction (1)
- 反思 (1)
- 事务 (1)
- 海量数据 (0)
- JDO (0)
- JPA (0)
- storm (0)
- log4j (0)
- java2d (0)
- btrace (0)
- hadoop (1)
- cygwin (1)
- sshd (1)
- wanlu (0)
- mysql (0)
- debug (0)
- autotest (0)
- Error (0)
- 数据结构 (0)
- descriptor (0)
- jdb (0)
- hsdb (0)
- wiki (0)
- maven (0)
- spring (0)
- eclipse (0)
- mvc (0)
- 代理 (0)
- oracle (0)
- hibernate (1)
- Hash (0)
- blockingqueue (0)
- remember (0)
- graphviz (0)
- http (0)
- post (0)
- jdbc (0)
- websocket (0)
- inter (0)
- got error: The Network Adapter could not establish the connection when creating a data source in Weblogic pointing to a Oracle database (1)
- bug (0)
- xml (0)
- mail (0)
- db (0)
- JAXB (0)
- StAX (0)
- google (0)
- haskell (1)
- rpc (0)
- read-code (0)
- spring-cloud (0)
- service-registry-discovery (0)
最新评论
-
IamSungod:
很有探索精神,学过多种编程语言呀
clojure parse xml -
messi_18:
是的。不知道别的平台是否也有类似问题。
scalatest 尝试(一) -
llh110220:
lz在windows下编写的吧
scalatest 尝试(一)
今天读了java.util.HashMap的源码,记录几点感受。起因是想知道,HashMap是如何实现的,最大可以容纳多少键值对。因为HashMap实现了Map接口,而Map接口扩展自Collection接口,所以HashMap也实现了size方法。size方法的返回值是int型的,所以,最多就能返回Integer.MAX_VALUE个结果。但是,并不意味着HashMap只能容纳这么多。这就涉及到HashMap是如何实现的。
HashMap内部有一个Entry的数组,就是所谓的bucket。每个bucket都是一个链表。链表中的元素就是键值对Entry。所以,理论上说HashMap可以容纳无限的键值对。但是最多就只能返回Integer.MAX_VALUE个。
接下来,说一下HashMap的优缺点:
优点:get和put的操作都是常数时间。
缺点:bucket的容量是动态增加的,每次容量调整,都会把原来的元素rehash并且复制到新的数组上面去,开销不小。
size,capacity,threshold,loadFactor之间的关系:
size是键值对的个数
capacity是buckets的个数
loadFactor是个参数,描述buckets的充满程度
threshold等于capacity*loadFactor,是一个阀值。如果size超过了它就要增加capacity(变为原来的2倍),并且rehash。
rehash的细节:
先创建一个长度为新长度的Entry数组作为buckets,然后,用它的长度rehash原来buckets中的所有Entry,并把Entry插入到新的buckets中。注意是插入而不是append到相应的bucket中:如果该bucket中已有Entry,就插入到那个entry的前面。
与Hashtable的区别:
HashMap是非线程安全的,而Hashtable是线程安全的
HashMap的key和value可以是null,而Hashtable不能接受null为key(null value待确认)
那么null的键hash到哪个bucket呢?就是指定bucket[0].
明天读下,Hashtable的源码。
HashMap内部有一个Entry的数组,就是所谓的bucket。每个bucket都是一个链表。链表中的元素就是键值对Entry。所以,理论上说HashMap可以容纳无限的键值对。但是最多就只能返回Integer.MAX_VALUE个。
接下来,说一下HashMap的优缺点:
优点:get和put的操作都是常数时间。
缺点:bucket的容量是动态增加的,每次容量调整,都会把原来的元素rehash并且复制到新的数组上面去,开销不小。
size,capacity,threshold,loadFactor之间的关系:
size是键值对的个数
capacity是buckets的个数
loadFactor是个参数,描述buckets的充满程度
threshold等于capacity*loadFactor,是一个阀值。如果size超过了它就要增加capacity(变为原来的2倍),并且rehash。
rehash的细节:
先创建一个长度为新长度的Entry数组作为buckets,然后,用它的长度rehash原来buckets中的所有Entry,并把Entry插入到新的buckets中。注意是插入而不是append到相应的bucket中:如果该bucket中已有Entry,就插入到那个entry的前面。
与Hashtable的区别:
HashMap是非线程安全的,而Hashtable是线程安全的
HashMap的key和value可以是null,而Hashtable不能接受null为key(null value待确认)
那么null的键hash到哪个bucket呢?就是指定bucket[0].
明天读下,Hashtable的源码。
发表评论
-
Atomic reference vs volatile reference
2015-12-21 00:05 452volatile reference和atomic refer ... -
java.lang.ClassNotFoundException: javax.mail.internet.MimeMessage
2013-06-27 16:27 0Today when I try to send mail b ... -
java exchanger
2013-06-19 15:54 0Today focus on: multi-thread in ... -
java blocking queue performance issue when large concurrency
2013-05-16 15:35 0I recalled someone ask me a que ... -
发现了几篇关于java虚拟机的好文章,要好好消化一下
2013-04-19 15:49 0好久没有关注jvm了,今天翻到了几篇好文章。先记下,有时间消化 ... -
Java Endorsed Standards Override Mechanism
2013-04-18 17:56 0Today I read an article named & ... -
java.lang.LinkageError
2012-12-11 14:13 0今天遇到了一个问题java.lang.IllegalAcces ... -
管理log插入。比如编译时插入。
2012-11-20 20:51 0管理log插入。比如编译时插入。 萌发这个想法是因为每次,调试 ... -
java解惑44题没重现
2012-11-09 02:18 0java解惑第44题我没有重现。 jdk1.6.0_35 ... -
java2d学习
2012-11-07 00:37 0想要系统的学习一下java2d 第一步学习画阿基米德螺旋曲线。 ... -
ASM初探
2012-11-02 00:38 0今天遇到了一个问题。Log4J的config and watc ... -
String.split
2012-10-31 21:02 835String.split(String reg)这个方法一点不 ... -
mina,hbase,zookeeper
2012-10-26 22:49 0我要学习探索新知识的有效手段。从这两个开始吧。 -
log4j那些事儿
2012-10-25 19:31 0都知道Log4j是用来输出日志的框架。不怕笑话,我一直都知道它 ... -
storm是什么
2012-09-28 16:49 0storm是什么?需要研究一下。 https://github ... -
你知道吗,-Long.MIN_VALUE == Long.MIN_VALUE
2012-09-20 22:58 3265相信吗,-Long.MIN_VALUE == Long.MIN ... -
transaction in JAVAEE and Spring
2012-09-14 19:16 0XA transaction and local transa ... -
weblogic 数据源的事务管理
2012-09-14 01:50 0有这样一个case,在weblogic下配置了两个数据源,其中 ... -
java NIO
2012-09-13 16:52 0由这篇文章想到了NIO。 然后又提到了这篇文章。 -
java 并发与并行(Java concurrent and parallel)
2012-09-13 16:19 0起因是想知道BlockedQueque是干嘛的,接着想到了这篇 ...
相关推荐
HashMap源码深度剖析,面试必备
HashMap源码(JDK1.7,含注释)
HashMap的部分源码解析
hashmap源码,可以看看http://blog.csdn.net/wabiaozia/article/details/50684556
精确的版本号是jdk-7u80。想不通,竟然很多人都收费,这个明明可以在安装JDK的目录中找到啊!自己下一个JDK就可以得到。
HashMap源码流程图 一图解析HashMap源码流程 // 默认的HashMap中数组的长度 16 static final int DEFAULT_INITIAL_CAPACITY = 1 ; // aka 16 // HashMap中的数组的最大容量 static final int MAXIMUM_CAPACITY = 1 ...
精确的版本号是jdk-8u181。想不通,竟然很多人都收费,这个明明可以在安装JDK的目录中找到啊!自己下一个JDK就可以得到。
HashMap 是 Java 中最常用的集合类之一,它是基于哈希表实现的,提供了高效的数据存取功能。HashMap 的核心原理是将键(key)通过哈希函数转化为数组索引,然后将键值对(key-value pair)存储在数组的对应位置。...
下面我们将深入探讨HashMap的源码,特别是关于`put`和`get`操作的实现细节。 HashMap的核心数据结构是一个数组配合链表/红黑树的数据结构。数组中的每个元素是一个Node对象,Node包含键、值、哈希码以及指向下一个...
HashMap之resize()方法源码解读 HashMap的resize()方法是HashMap中最核心的方法之一,该方法负责扩容HashMap的容量,以便存储更多的键值对。下面我们将对HashMap的resize()方法进行源码解读,了解其扩容机制和原理...
《HashMap源码剖析》 HashMap是Java编程语言中一个非常重要的数据结构,它属于集合框架的一部分,提供了键值对(Key-Value)的存储方式。HashMap在内部使用了一个数组和链表来实现,实现了快速的查找、插入和删除...
《手写HashMap源码解析——深入理解数据结构与算法》 HashMap是Java编程语言中一个常用的集合类,它提供了一种高效、灵活的键值对存储方式。在面试过程中,尤其是2020年及以后的技术面试中,深入理解HashMap的实现...
面试中,HashMap的源码分析与实现是一个常见的考察点,因为它涉及到数据结构、并发处理和性能优化等多个核心领域。本篇文章将深入探讨HashMap的内部工作原理、关键特性以及其在实际应用中的考量因素。 HashMap基于...
hashmap源码 Table Of Contents day01_JAVA语言概述与基本语法:标识符、变量也变量分类、源码_反码_补码、进制转换、编码与字符集 day02_基本语法.运算符:算术运算符、赋值运算符、比较运算符、逻辑运算符、位...
HashMap 源码实现红黑树添加元素和删除元素 HashMap 中使用红黑树来存储元素,是为了提高查找、插入和删除操作的性能。红黑树是一种自平衡二叉树,可以保持二叉树的平衡,从而获得较高的查找性能。 红黑树的创建...
1.面试必考之HashMap源码分析与实现 伸缩性角度看HashMap的不足