HashMap和Hashtable将键/值对存储在哈希表中。当使用Hashtable或HashMap时, 我们指定一个用作键的对象, 以及要链接到该键的值。然后对键进行哈希处理, 并将所得哈希码用作将值存储在表中的索引。
示例Java代码。
//A sample Java program to demonstrate HashMap and HashTable
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
public static void main(String args[])
{
//----------hashtable -------------------------
Hashtable<Integer, String> ht= new Hashtable<Integer, String>();
ht.put( 101 , " ajay" );
ht.put( 101 , "Vijay" );
ht.put( 102 , "Ravi" );
ht.put( 103 , "Rahul" );
System.out.println( "-------------Hash table--------------" );
for (Map.Entry m:ht.entrySet()) {
System.out.println(m.getKey()+ " " +m.getValue());
}
//----------------hashmap--------------------------------
HashMap<Integer, String> hm= new HashMap<Integer, String>();
hm.put( 100 , "Amit" );
hm.put( 104 , "Amit" );
hm.put( 101 , "Vijay" );
hm.put( 102 , "Rahul" );
System.out.println( "-----------Hash map-----------" );
for (Map.Entry m:hm.entrySet()) {
System.out.println(m.getKey()+ " " +m.getValue());
}
}
}
输出如下:
-------------Hash table--------------
103 Rahul
102 Ravi
101 Vijay
-----------Hash map-----------
100 Amit
101 Vijay
102 Rahul
104 Amit
哈希图与哈希表
1. HashMap不同步。它不是线程安全的, 没有适当的同步代码就无法在许多线程之间共享, 而哈希表是同步的。它是线程安全的, 可以与许多线程共享。
2. HashMap允许一个null键和多个null值, 而Hashtable不允许任何null键或值。
3.如果不需要线程同步, 通常首选HashMap而不是HashTable
为什么HashTable不允许null, 而HashMap不允许?
为了成功地从HashTable存储和检索对象, 用作键的对象必须实现hashCode方法和equals方法。由于null不是对象, 因此无法实现这些方法。 HashMap是Hashtable的高级版本和改进。 HashMap是在以后创建的。
相关文章:
- Java中的HashMap和TreeMap
- Java中的TreeMap, HashMap和LinkedHashMap之间的区别
资源:
http://docs.oracle.com/javase/6/docs/api/java/util/Hashtable.html:
如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请发表评论。
评论前必须登录!
注册