HashMap工作原理以及与HashTable的区别--面试题
2017-01-04 13:15
429 查看
每当往hashmap里面存放key-value对的时候,都会为它们实例化一个Entry对象,这个Entry对象就会存储在前面提到的Entry数组table中。现在你一定很想知道,上面创建的Entry对象将会存放在具体哪个位置(在table中的精确位置)。答案就是,根据key的hashcode()方法计算出来的hash值(来决定)。hash值用来计算key在Entry数组的索引。
要牢记以下关键点:
HashMap有一个叫做Entry的内部类,它用来存储key-value对。
上面的Entry对象是存储在一个叫做table的Entry数组中。
table的索引在逻辑上叫做“桶”(bucket),它存储了链表的第一个元素。
key的hashcode()方法用来找到Entry对象所在的桶。
如果两个key有相同的hash值(即冲突),他们会被放在table数组的同一个桶里面(以链表方式存储)。
key的equals()方法用来确保key的唯一性。
value对象的equals()和hashcode()方法根本一点用也没有。
quote from:http://www.importnew.com/10620.html
Hashtable和HashMap都实现Map接口,有几个主要的不同:线程安全以及速度。仅在你需要完全的线程安全的时候使用Hashtable,而如果你使用Java5或以上的话,请使用ConcurrentHashMap吧。
HashMap是非synchronized,即非线程安全,但在单线程下,速度快。
HashMap可以通过下面的语句进行同步:
Map m = Collections.synchronizeMap(hashMap);
quote from:http://www.importnew.com/7010.html
ConurrentHashMap和Hashtable的区别
这篇文章是HashMap的工作原理以及HashMap和Hashtable的区别的后续。如果你已经读过的话,那么我相信你读完本篇之后会有所收获。
同步的集合类(Hashtable和Vector),同步的封装类(使用Collections.synchronizedMap()方法和Collections.synchronizedList()方法返回的对象)可以创建出线程安全的Map和List。但是有些因素使得它们不适合高并发的系统。它们仅有单个锁,对整个集合加锁,以及为了防止ConcurrentModificationException异常经常要在迭代的时候要将集合锁定一段时间,这些特性对可扩展性来说都是障碍。
ConcurrentHashMap和CopyOnWriteArrayList保留了线程安全的同时,也提供了更高的并发性。ConcurrentHashMap和CopyOnWriteArrayList并不是处处都需要用,大部分时候你只需要用到HashMap和ArrayList,它们用于应对一些普通的情况。
简而言之,在迭代的过程中,ConcurrentHashMap仅仅锁定map的某个部分,而Hashtable则会锁定整个map。
要牢记以下关键点:
HashMap有一个叫做Entry的内部类,它用来存储key-value对。
上面的Entry对象是存储在一个叫做table的Entry数组中。
table的索引在逻辑上叫做“桶”(bucket),它存储了链表的第一个元素。
key的hashcode()方法用来找到Entry对象所在的桶。
如果两个key有相同的hash值(即冲突),他们会被放在table数组的同一个桶里面(以链表方式存储)。
key的equals()方法用来确保key的唯一性。
value对象的equals()和hashcode()方法根本一点用也没有。
quote from:http://www.importnew.com/10620.html
Hashtable和HashMap都实现Map接口,有几个主要的不同:线程安全以及速度。仅在你需要完全的线程安全的时候使用Hashtable,而如果你使用Java5或以上的话,请使用ConcurrentHashMap吧。
HashMap是非synchronized,即非线程安全,但在单线程下,速度快。
我们能否让HashMap同步?
HashMap可以通过下面的语句进行同步:Map m = Collections.synchronizeMap(hashMap);
quote from:http://www.importnew.com/7010.html
ConurrentHashMap和Hashtable的区别
这篇文章是HashMap的工作原理以及HashMap和Hashtable的区别的后续。如果你已经读过的话,那么我相信你读完本篇之后会有所收获。
为什么我们需要ConcurrentHashMap和CopyOnWriteArrayList
同步的集合类(Hashtable和Vector),同步的封装类(使用Collections.synchronizedMap()方法和Collections.synchronizedList()方法返回的对象)可以创建出线程安全的Map和List。但是有些因素使得它们不适合高并发的系统。它们仅有单个锁,对整个集合加锁,以及为了防止ConcurrentModificationException异常经常要在迭代的时候要将集合锁定一段时间,这些特性对可扩展性来说都是障碍。ConcurrentHashMap和CopyOnWriteArrayList保留了线程安全的同时,也提供了更高的并发性。ConcurrentHashMap和CopyOnWriteArrayList并不是处处都需要用,大部分时候你只需要用到HashMap和ArrayList,它们用于应对一些普通的情况。
简而言之,在迭代的过程中,ConcurrentHashMap仅仅锁定map的某个部分,而Hashtable则会锁定整个map。
相关文章推荐
- HashMap的工作原理以及与hashtable的区别
- hashmap与hashtable的区别,以及实现hashmap的同步操作
- C# Hashtable 使用说明 以及 Hashtable和HashMap的区别[转]
- ArrayList和Vector的区别以及HashMap和Hashtable的区别
- Java基础知识强化之集合框架笔记66:Map集合面试题之HashMap和Hashtable区别(重要)
- ArrayList和Vector的区别,HashMap和Hashtable的区别以及线程安全的理解
- hashmap与hashtable的区别,以及实现hashmap的同步操作
- Java基础之ArrayList与LinkedList、Vector,以及HashMap与HashTable的区别
- 浅析java中ArrayList与Vector的区别以及HashMap与Hashtable的区别
- 说说HashMap和Hashtable的区别—— Java经典面试题系列
- 面试题_HashTable和HashMap的区别
- C#hashtable使用说明 以及 Hashtable和HashMap的区别【总结性】
- HashMap和Hashtable的区别 以及Hashmap的用法
- 浅析java中ArrayList与Vector的区别以及HashMap与Hashtable的区别
- 面试题总结之一:HashMap与Hashtable的区别
- ArrayList和Vector以及HashTable和HashMap区别
- C# Hashtable 使用说明 以及 Hashtable和HashMap的区别[转]
- hashmap与hashtable的区别,以及实现hashmap的同步操作
- Java基础之ArrayList与LinkedList、Vector,以及HashMap与HashTable的区别
- hashmap与hashtable的区别,以及实现hashmap的同步操作