`
jyangzi5
  • 浏览: 212295 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Hashmap与Hashtable的区别及应用

阅读更多
一、Hashmap与Hashtable的区别
1.  java.util.Hashtable<K,V>继承java.util.Dictionary<K,V>类,同时实现java.util.Map<K,V>接口;java.util.HashMap继承java.util.AbstractMap抽象类,同时实现java.util.Map接口,但因为AbstractMap也实现了Map接口,所以HashMap的方法基本上都来自Map接口;
2.  Hashtable中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。即是说,在多线程应用程序中,不用专门的操作就安全地可以使用Hashtable了;而对于HashMap,则需要额外的同步机制。但HashMap的同步问题可通过java.util.Collections的一个静态方法得到解决:
Java代码
Map Collections.synchronizedMap(Map m) 

Map Collections.synchronizedMap(Map m)
        这个方法返回一个同步的Map,这个 Map封装了底层的HashMap的所有方法,使得底层的HashMap即使是在多线程的环境中也是安全的。
3.  在HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示HashMap中没有该键,也可以表示该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键,而应该用 containsKey()方法来判断,并且HashTable中不允许存储null值。
二、应用:
1.hashmap

  HashMap   hm=new   HashMap();
  //Put elements to the map
  hm.put("Evan",new Double(12345.77));
  hm.put("Rose",new Double(78777));
  hm.put("Magic",new Double(-99.10));
  hm.put("Mike",new Double(100.00));
  hm.put("Sue",new Double(17.15));
  //Get a set of the entries
  Set set = hm.entrySet();
  //Get an iterator
  Iterator itr = set.iterator();
  //Display elements
  while (itr.hasNext()){
   Map.Entry me = (Map.Entry)itr.next();
   System.out.println(me.getKey() + ": ");
   System.out.println(me.getValue());


2.hashtable

以哈希表的形式存储数据,数据的形式是键值对.
特点:
查找速度快,遍历相对慢
键值不能有空指针和重复数据

创建
Hashtable<Integer,String> ht=new Hashtable<Integer,String>();

添值

ht.put(1,"Andy");
ht.put(2,"Bill");
ht.put(3,"Cindy");
ht.put(4,"Dell");
ht.put(5,"Felex");
ht.put(6,"Edinburg");
ht.put(7,"Green");

取值

String str=ht.get(1);
System.out.println(str);// Andy

对键进行遍历

Iterator it = ht.keySet().iterator();

while (it.hasNext()) {
    Integer key = (Integer)it.next();
    System.out.println(key);
}

对值进行遍历

Iterator it = ht.values().iterator();

while (it.hasNext()) {
    String value =(String) it.next();
    System.out.println(value);
}

取Hashtable记录数

Hashtable<Integer,String> ht=new Hashtable<Integer,String>();

ht.put(1,"Andy");
ht.put(2,"Bill");
ht.put(3,"Cindy");
ht.put(4,"Dell");
ht.put(5,"Felex");
ht.put(6,"Edinburg");
ht.put(7,"Green");

int i=ht.size();// 7

删除元素

Hashtable<Integer,String> ht=new Hashtable<Integer,String>();

ht.put(1,"Andy");
ht.put(2,"Bill");
ht.put(3,"Cindy");
ht.put(4,"Dell");
ht.put(5,"Felex");
ht.put(6,"Edinburg");
ht.put(7,"Green");

ht.remove(1);
ht.remove(2);
ht.remove(3);
ht.remove(4);

System.out.println(ht.size());// 3


Iterator it = ht.values().iterator();

while (it.hasNext()) {
        // Get value
    String value =(String) it.next();
    System.out.println(value);
}

输出:
3
Green
Edinburg
Felex


分享到:
评论

相关推荐

    hashmap与hashtable区别

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

    HashMap和HashTable的区别和不同

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

    HashMap与HashTable区别

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

    hashMap和hashTable的区别

    总体来说,`HashMap` 和 `HashTable` 在设计上有显著不同,选择哪一个取决于具体的应用场景。如果不需要线程安全,并且可能涉及 `null` 键或值的情况下,建议使用 `HashMap`;如果需要线程安全,或者希望使用早期的 ...

    HashMap与HashTable和HashSet的区别

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

    hashmap和hashtable的区别.docx

    综上所述,选择 HashMap 还是 Hashtable 主要取决于你的应用场景。如果你在多线程环境中且需要线程安全,可以考虑使用 Hashtable 或 ConcurrentHashMap。而在单线程环境中,HashMap 通常提供更好的性能。对于更现代...

    Hashtable和HashMap的区别:

    ### Hashtable与HashMap的区别详解 #### 一、基本概念与历史背景 在Java编程语言中,`Hashtable` 和 `HashMap` 都是用来存储键值对的数据结构。这两种数据结构虽然相似,但是在实现细节上存在显著差异。 1. **...

    HashMap 和 Hashtable的区别

    HashMap 和 Hashtable 是 Java 集合框架中两个重要的 Map 实现,它们虽然都是用来存储键值对的数据结构,但在很多方面存在显著的区别。以下将详细分析它们的主要差异、工作原理和适用场景。 1. **线程安全性** - `...

    HashMap,HashTable,ConcurrentHashMap之关联.docx

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

    java面试题——详解HashMap和Hashtable 的区别

    HashMap 和 Hashtable 是 Java 中两种常用的哈希表数据结构,它们都是用来存储键值对的数据结构,但它们在设计和实现上有显著的区别。以下是对这两者差异的详细解释: 1. **线程安全性**: - `Hashtable` 是线程...

    hashtable和hashmap的区别

    ### Hashtable和HashMap的区别 在Java编程语言中,`Hashtable`和`HashMap`是两种非常重要的数据结构,它们都实现了`Map`接口,用于存储键值对。尽管它们有着相似的功能,但在实现细节和应用场景上存在显著差异。接...

    Hashtable和HashMap区别

    ### Hashtable与HashMap的区别 在Java编程语言中,`Hashtable`和`HashMap`是两种非常重要的数据结构,它们都属于`Map`接口的实现类,用于存储键值对数据。尽管两者在功能上相似,但在实际应用中却存在显著差异。 #...

    java中HashMap,LinkedHashMap,TreeMap,HashTable的区别

    ### Java中HashMap, LinkedHashMap, TreeMap,HashTable的区别 在Java编程语言中,`Map`接口是集合框架中的一个重要组成部分,用于存储键值对。本文将详细分析四种常用的`Map`实现类:`HashMap`, `LinkedHashMap`, ...

    Java容器HashMap与HashTable详解

    《Java容器HashMap与HashTable详解》 HashMap和HashTable是Java中两种重要的数据结构,它们都是用于存储键值对的数据容器,但两者在设计和使用上有显著的差异。 HashMap是Java集合框架的一部分,它继承自...

    Java中HashMap和Hashtable的区别浅析

    以下是关于HashMap和Hashtable的六点关键区别: 1. 线程安全性: - HashMap是非线程安全的。这意味着在多线程环境中,如果多个线程同时修改HashMap,可能会导致数据不一致或异常。程序员需要在多线程场景下自行...

    Java中HashMap和Hashtable及HashSet的区别

    接下来,`HashMap`同样实现了`Map`接口,但与`Hashtable`相比有以下不同: 1. **非同步**:`HashMap`不是线程安全的,如果在多线程环境下使用,需要手动进行同步控制。 2. **允许null值**:`HashMap`允许null值作为...

    Java中List、ArrayList、Vector及map、HashTable、HashMap分别的区别.

    与HashMap相比,HashTable的同步特性使得它在多线程环境下更安全,但在单线程环境下,由于同步开销,其性能较低。 5. LinkedList与ArrayList的比较 LinkedList是List接口的另一个实现,它基于双向链表实现,对于在...

    hashmap面试题_hashmap_

    4. HashMap与Hashtable的区别? 答:HashMap非线程安全,而Hashtable是线程安全的;HashMap允许null键值,Hashtable不允;HashMap迭代器在修改时不会抛出ConcurrentModificationException,而Hashtable会。 5. ...

    第9讲 对比Hashtable、HashMap、TreeMap有什么不同?1

    Hashtable与HashMap类似,也是基于哈希表的,但它在Java早期版本中就已经存在,并且是线程安全的。由于同步机制的存在,Hashtable的性能相比HashMap较低,现在在多线程需求下,通常更推荐使用ConcurrentHashMap,它...

    Java容器类List、ArrayList、Vector及map、HashTable应用

    Java容器类List、ArrayList、Vector及map、HashTable应用 List、ArrayList、Vector及map、HashTable是Java中常用的容器类,它们都继承自Collection接口,并提供了不同的实现方式和特点。在实际开发中,选择合适的...

Global site tag (gtag.js) - Google Analytics