每次看到HashMap和Hashtable感觉很像,但是又不一样,要我说出个因为所以然啦还真的说不出来,索性整理出来,便于以后查阅!
一、HashMap和Hashtable的区别
1、Hashtable 的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap。
2、 Hashtable不允许null值(key和value都不可以),HashMap允许null值(key和value都可以)
3、Hashtable这个类的命名不遵循Java API 命名规范,第二个单词首字母小写。--也算一个吧
4、哈希值使用不同,Hashtable直接使用对象的hashcode。代码如下:
int hash = key.hashCode();
int index = (hash & 0x7FFFFFFF) % tab.length;
而HashMap需要重新计算hash值。代码如下:
int hash = hash(key.hashCode());
int i = indexFor(hash, table.length);
indexFor()方法:
static int indexFor(int h, int length) {
return h & (length-1);
}
二、遍历Hashtable和HashMap
遍历 Hashtable 有四种方法:
1、 直接toString() 方法 获取的是 字符串性质的键值对
2、 通过枚举Enumeration
//通过枚举实现遍历
Enumeration em = hashtable.elements();
while(em.hasMoreElements()){
System.out.println(em.nextElement());
}
3、 通过entrySet() 方法返回一个 Set , 然后进行遍历处理
//通过set 获取 遍历
Iterator it2 = hashtable.entrySet().iterator();
while(it2.hasNext()){
Map.Entry en = (Map.Entry)it2.next();
System.out.println(en.getKey());
System.out.println(en.getValue());
}
4、 遍历Hashtable的值:
Collection coll = hashtable.values();
Iterator it = coll.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
遍历HashMap的三种方法:
1、 直接toString(),返回的是字符串性质的键值对!
2、 使用entrySet() 返回一个set,进行遍历
//通过set 获取 遍历
Iterator it3 = map.entrySet().iterator();
while(it2.hasNext()){
Map.Entry en = (Map.Entry)it3.next();
System.out.println(en.getKey());
System.out.println(en.getValue());
}
3、 遍历值
//获取所有的value 值
Collection coll1 = map.values();
Iterator it1 = coll1.iterator();
while(it1.hasNext()){
System.out.println(it1.next());
}
分享到:
相关推荐
在Java编程语言中,集合框架是处理对象数组的重要工具,其中`List`、`ArrayList`、`Vector`、`HashTable`和`HashMap`是五个关键的接口和类,它们各有不同的特性和用途。以下是这些概念的详细解释: 1. **List接口**...
### Hashtable和HashMap的区别 在Java编程语言中,`Hashtable`和`HashMap`是两种非常重要的数据结构,它们都实现了`Map`接口,用于存储键值对。尽管它们有着相似的功能,但在实现细节和应用场景上存在显著差异。接...
在Java编程语言中,`Hashtable` 和 `HashMap` 都是用来存储键值对的数据结构。这两种数据结构虽然相似,但是在实现细节上存在显著差异。 1. **Hashtable**:作为 `Dictionary` 类的子类,`Hashtable` 是 Java 最早...
在Java编程语言中,`Hashtable`和`HashMap`是两种非常重要的数据结构,它们都属于`Map`接口的实现类,用于存储键值对数据。尽管两者在功能上相似,但在实际应用中却存在显著差异。 #### 1. 历史与实现基础 `...
综上所述,`HashMap`和`HashTable`在多个方面存在差异。选择哪一个取决于特定的应用场景和需求: - 如果需要线程安全并且能够接受一定的性能损耗,可以选择`HashTable`。 - 如果追求更高的性能且可以自己处理线程...
比较分析Vector、ArrayList和hashtable hashmap数据结构
HashSet实现了Set接口,它不允许集合中有重复的值,当我们提到HashSet时,第一件事情就是在将对象存储在HashSet之前,要先确保对象重写equals()和hashCode()方法,这样才能比较对象的值是否相等,以确保set中没有...
HashMap和Hashtable是两种常用的Map实现类。HashMap是一个非同步的Map实现类,它允许null,即null value和null key。Hashtable是一个同步的Map实现类,它不允许null。 List、ArrayList、Vector及map、HashTable、...
Java中的`HashTable`和`HashMap`都是实现`Map`接口的数据结构,用于存储键值对。两者虽然在功能上相似,但在实现细节和使用场景上有显著的区别。 首先,线程安全性是两者之间的一个关键差异。`HashTable`是线程安全...
Java集合专题总结:HashMap和HashTable源码学习和面试总结 本文总结了Java集合专题中的HashMap和HashTable,涵盖了它们的源码学习和面试总结。HashMap是一种基于哈希表的集合类,它的存储结构是一个数组,每个元素...
HashMap和HashTable底层原理以及常见面试题 HashMap和HashTable是Java中两个常用的数据结构,都是基于哈希表实现的,但它们之间存在着一些关键的区别。本文将深入探讨HashMap和HashTable的底层原理,并总结常见的...
- HashMap 和 Hashtable 都实现了 Map 接口,HashMap 更快但不是线程安全的,而 Hashtable 是线程安全但较慢。WeakHashMap 则使用弱引用作为键,有助于防止内存泄漏。 - 在选择使用哪种数据结构时,需要考虑性能需求...
HashMap和Hashtable的区别。 HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。 HashMap...
总的来说,HashMap、HashTable和HashSet各有其特点和适用场景。HashMap适合单线程环境和对性能要求高的场合,HashTable适用于需要线程安全但对性能要求不那么高的情况,而HashSet则是存储不重复元素的高效选择。了解...
### HashMap与HashTable和HashSet的区别 #### 一、概述 在Java集合框架中,`HashMap`, `HashTable` 和 `HashSet` 是三个重要的数据结构,它们分别实现了`Map`接口和`Set`接口,提供了不同的功能来满足不同的编程...
了解Map的整体结构也很重要,HashMap和其他Map实现如LinkedHashMap(保持插入顺序或访问顺序的HashMap)都是从AbstractMap继承,而Hashtable则直接继承Dictionary类,这反映了它们设计上的差异和适用场景的不同。...
Hashtable和HashMap的主要区别在于Hashtable使用了synchronized方法,线程安全,而HashMap则没有。Hashtable和HashMap都提供了put、get、remove等方法,用于操作Map中的元素。 Hashtable是基于哈希表的实现,它提供...
### hashMap和hashTable的区别 #### 一、简介与基本概念 `HashMap` 和 `HashTable` 都是 Java 集合框架中非常重要的数据结构,它们都实现了 `Map` 接口,用于存储键值对。尽管它们在功能上有很多相似之处,但在...
本资源摘要信息涵盖了 Java 集合框架的基本概念和实现细节,着重介绍了 Java 集合框架中的 HashMap、Hashtable、ArrayList、LinkedList 等常用类,并对比了 Hashtable 和 HashMap 的区别,详细分析了两者在源代码...
Java中的`Hashtable`和`HashMap`都是`Map`接口的实现类,它们都用于存储键值对数据。然而,这两个类在设计和功能上有显著的差异,这些差异主要体现在线程安全性、空值处理、迭代器类型以及哈希表的初始化和扩容策略...