`
fxly0401
  • 浏览: 147984 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

HashMap与HashTable的区别

阅读更多
1.hashMap去掉了HashTable 的contains方法,但是加上了containsValue()和containsKey()方法。
2.hashTable同步的,而HashMap是非同步的,可以使用Colletcions进行同步
Map Collections.synchronizedMap(Map m);效率上HashMap比Hashtable要高。
3.hashMap允许空键值,而hashTable不允许。
4.HashTable不允许null值(key和value都不可以),HashMap允许null值(key和value都可以)。
其实在编译期不会有任何的不一样,会照样执行,只是在运行期的时候Hashtable中设置的话回出现空指针异常
5.在HashMap中,可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示 HashMap中没有该键,也可以表示该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键, 而应该用containsKey()方法来判断。

Hashtable代码如下
        Hashtable h=new Hashtable();
        h.put("用户1",new Integer(90));
	h.put("用户2",new Integer(50));
	h.put("用户3",new Integer(60));
	h.put("用户4",new Integer(70));
	h.put("用户5",new Integer(80));
//	h.put("Null",null);
//	h.put(null,"Null");
//	h.put(null,"Empty");
        Enumeration e=h.elements();
	while(e.hasMoreElements()){
		System.out.println(e.nextElement());
	}
	System.out.println("****"+h.containsKey(new String("用户8")));
	System.out.println("****"+h.containsValue(new Integer(60)));

结果输出
80
70
60
50
90
****false
****true
注:因为Hashtable不允许null键和null值,所以如果去掉代码中的任意一行注释,会出现异常:java.lang.NullPointerException
-------------------------------------------------------------------------
HashMap代码如下:
        HashMap h = new HashMap();
	h.put("用户1",new Integer(90));
	h.put("用户2",new Integer(50));
	h.put("用户3",new Integer(60));
	h.put("用户4",new Integer(70));
	h.put("用户5",new Integer(80));
	h.put("Null",null);
	h.put(null,"Null");////////////////
	h.put(null,"Empty");
        System.out.println("****"+h.containsKey(new String("用户8")));
	System.out.println("****"+h.containsValue(new Integer(60)));
	Iterator e=h.entrySet().iterator();
	while(e.hasNext()){
		System.out.println(e.next());
	}

输入结果如下:
****false
****true
null=Empty
用户4=70
用户3=60
用户5=80
Null=null
用户2=50
用户1=90

注:因为HashMap允许null键和null值,所以不会出现异常,但是相同的键值就会出现第二次覆盖第一次的结果,所以////////////此行键值对不存在

同步HashMap代码示例:

import java.util.Collections;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;

public class TableMap {

 public static void main(String... strings) {
  Map<Integer, Integer> map = Collections.synchronizedMap(new HashMap<Integer, Integer>());//为hashmap加上同步
  Hashtable<Integer, Integer> table = new Hashtable<Integer, Integer>();
  long before = System.currentTimeMillis();
  add(map);
  System.out.println("add map time=" + (System.currentTimeMillis() - before));
  before = System.currentTimeMillis();
  add(table);
  System.out.println("add table time=" + (System.currentTimeMillis() - before));

  before = System.currentTimeMillis();
  get(map);
  System.out.println("get map time=" + (System.currentTimeMillis() - before));

  before = System.currentTimeMillis();
  get(table);
  System.out.println("get table time=" + (System.currentTimeMillis() - before));
 }

 public static void add(Map<Integer, Integer> map) {
  for (int i = 0; i < 300000; i++) {
   map.put(i, i);
  }
 }

 public static void get(Map<Integer, Integer> map) {
  for (int i = 0; i < 300000; i++) {
   map.get(i);
  }
 }
}
分享到:
评论

相关推荐

    hashmap与hashtable区别

    ### HashMap与Hashtable的区别 在Java编程语言中,`HashMap`和`Hashtable`是两种非常重要的数据结构,它们都用于存储键值对。然而,在实际应用过程中,这两种数据结构有着本质的不同,下面将详细介绍这些差异。 ##...

    HashMap与HashTable区别

    ### HashMap与HashTable的区别 在Java编程语言中,`HashMap`和`HashTable`是两种非常重要的数据结构,它们都实现了`Map`接口,并提供了键值对的存储方式。这两种数据结构虽然相似,但在实现细节和使用场景上存在...

    HashMap和HashTable的区别和不同

    ### HashMap与HashTable的区别详解 #### 引言 在Java编程中,`HashMap`与`HashTable`作为两种常用的数据结构,经常被用来存储键值对数据。尽管它们在功能上相似,但在实现细节、性能表现以及使用场景方面存在显著...

    HashMap底层实现原理HashMap与HashTable区别HashMap与HashSet区别.docx

    HashMap与HashTable的主要区别在于线程安全性和对null值的支持。HashMap是非同步的,意味着在多线程环境中,如果不进行适当的同步控制,可能会导致数据不一致。而HashTable是同步的,因此它在多线程环境下的安全性更...

    hashMap和hashTable的区别

    ### hashMap和hashTable的区别 #### 一、简介与基本概念 `HashMap` 和 `HashTable` 都是 Java 集合框架中非常重要的数据结构,它们都实现了 `Map` 接口,用于存储键值对。尽管它们在功能上有很多相似之处,但在...

    HashMap与HashTable和HashSet的区别

    ### HashMap与HashTable和HashSet的区别 #### 一、概述 在Java集合框架中,`HashMap`, `HashTable` 和 `HashSet` 是三个重要的数据结构,它们分别实现了`Map`接口和`Set`接口,提供了不同的功能来满足不同的编程...

    HashMap与HashTable的区别(含源码分析)

    在Java编程语言中,`HashMap`和`HashTable`都是实现键值对存储的数据结构,但它们之间存在一些显著的区别,这些区别主要体现在线程安全性、性能、null值处理以及一些方法特性上。以下是对这两个类的详细分析: 1. ...

    HashMap和HashTable底层原理以及常见面试题

    HashMap和HashTable是Java中两个常用的数据结构,都是基于哈希表实现的,但它们之间存在着一些关键的区别。本文将深入探讨HashMap和HashTable的底层原理,并总结常见的面试题。 HashMap的底层原理 HashMap是Java中...

    Java集合专题总结:HashMap 和 HashTable 源码学习和面试总结

    Java集合专题总结:HashMap和HashTable源码...本文总结了HashMap和HashTable的源码学习和面试总结,涵盖了它们的存储结构、构造方法、get和put方法的源码分析、Hash表的特点和缺点、HashTable和HashMap的区别等内容。

    hashmap和hashtable的区别

    hashmap和hashtable的区别

    HashMap,HashTable,LinkedHashMap,TreeMap的区别

    HashMap, HashTable, LinkedHashMap, TreeMap 的区别 在 Java 中,Map 是一个非常重要的集合类,用于存储键值对。其中,HashMap, HashTable, LinkedHashMap, TreeMap 是四种常用的 Map 实现类,每种类都有其特点和...

    hashMap和Hashtable的区别1

    hashMap和Hashtable的区别1

    hashmap和hashtable的区别.docx

    HashMap 和 Hashtable 是 Java 集合框架中两个重要的映射数据结构,它们都实现了 Map 接口,但具有显著的差异。以下将详细介绍这两个类的主要区别: 1. 线程安全性: - HashMap 不是线程安全的,这意味着在多线程...

    有关hashMap跟hashTable的区别,说法正确的是?

    在Java编程语言中,`HashMap`和`HashTable`都是实现`Map`接口的数据结构,用于存储键值对。它们在很多方面有所不同,这些差异主要体现在线程安全性、迭代器类型、null值支持以及哈希码处理等方面。以下是关于两者...

    11.HashMap和HashTable的区别.avi

    11.HashMap和HashTable的区别.avi

    HashMap和Hashtable的区别Java开发Jav

    HashMap和Hashtable的区别Java开发Java经验技巧共2页.pdf.zip

    HashMap,HashTable,ConcurrentHashMap之关联.docx

    HashMap 和 HashTable 的区别 1. 线程安全性:HashMap 是非线程安全的,HashTable 是线程安全的。 2. 键和值的 null 值:HashMap 的键和值都允许有 null 值存在,而 HashTable 则不行。 3. 效率:HashMap 的效率比 ...

    HashMap和HashTable区别共2页.pdf.zi

    了解这些区别后,开发者可以根据具体需求选择使用`HashMap`或`HashTable`。在大多数情况下,由于性能和灵活性的考虑,`HashMap`是首选。然而,如果在多线程环境中且无法通过其他手段确保同步,那么`HashTable`可能是...

    Java面试题11.HashMap和HashTable的区别.mp4

    Java面试题11.HashMap和HashTable的区别.mp4

    浅析java中ArrayList与Vector的区别以及HashMap与Hashtable的区别

    ArrayList和Vector,以及HashMap和Hashtable,都是常用的容器,但它们之间存在一些关键的区别,这将影响到在不同场景下的选择和使用。 首先,我们来看ArrayList和Vector的区别: 1. **同步性**: - `ArrayList` ...

Global site tag (gtag.js) - Google Analytics