作者:Wei-Micro_788 | 来源:互联网 | 2023-05-16 11:51
Java基础知识HashMap和HashTable的区别HashMap和HashTable区别:名称HashMap键和值都可以为null含有containsValue
Java 基础知识 HashMap 和HashTable 的区别
HashMap和HashTable 区别:
名称 |
|
|
|
|
|
HashMap |
键和值都可以为null |
含有containsValue,和containsKey方法 |
HashMap是非synchronized |
HashMap 是Java1.2 引进的Map interface 的一个实现 |
速度较hashtable快 |
HashTable |
键和值不可以为null |
含有containsValue,和containsKey方法 |
HashTable是synchronized |
Hashtable 继承于Dictionary 类 |
速度较慢 |
1) sychronized意味着在一次仅有一个线程能够更改Hashtable。就是说任何线程要更新Hashtable时要首先获得同步锁,其它线程要等到同步锁被释放之后才能再次获得同步锁更新Hashtable。
2)hashMap如何同步:
HashMap可以通过下面的语句进行同步:
Map m = Collections.synchronizeMap(hashMap);
3)HashMap和HashTable
Hashtable和HashMap有几个主要的不同:线程安全以及速度。仅在你需要完全的线程安全的时候使用Hashtable,而如果你使用Java 5或以上的话,请使用ConcurrentHashMap吧。
package com.java.test;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;
public class HashMapHashTableTest {
/**
* @param args
*/
public static void main(String[] args) {
/**
* Map 是一个键值对 键可以不重复,但是值需要重复
*/
//System.out.println("Test HashMap");
//HashMapHashTableTest.testHashMap();
System.out.println("Test HashTable");
HashMapHashTableTest.testHashTale();
}
public static void init(Map map){
/**
* Map 的键是不可重复的,如果插入两个键值相同的记录,
* 后插入的记录会覆盖先插入的记录
*/
if(map != null){
String key = null;
for(int i = 5; i>0; i--){
key = new Integer(i).toString() +".0";
map.put(key, key.toString());
map.put(key, key.toString()+"0");
}
}
}
public static void output(Map map){
if(map != null){
Object key = null;
Object value = null;
// 使用迭代器遍历 Map键, 根据键进行取值
Iterator it = map.keySet().iterator();
//while(Object key: map.keySet()){
//
//}
while(it.hasNext()){
key = it.next();
value = map.get(key);
System.out.println("Key:"+key+" Value:"+value);
}
System.out.println("Map.Entry output key value:");
/**
* 还有一种方式遍历 Map keySet 是一种方式, Map.entry是一种方式entrySet()
* 不可贪多, 贪多嚼不烂
*/
Map.Entry entry = null;
it = map.entrySet().iterator(); //entry set 之后的迭代器
while(it.hasNext()){
entry = (Map.Entry) it.next();
System.out.println("Key: "+entry.getKey()+" Value: "+entry.getValue());
}
}
}
public static void testHashMap(){
Map hashMap = new HashMap();
//hashMap.containsKey(key)
//hashMap.containsValue(value)
init(hashMap);
//HashMap 的键值对可以为Null
hashMap.put(null, "ddd");
// HashMap的值可以为null
hashMap.put("aaa", null);
output(hashMap);
}
public static void testHashTale(){
Map hashTable = new Hashtable();
init(hashTable);
//hashTable.containsKey(key)
//hashTable.containsValue(value)
//HashTale 的键值不能为 Null
//hashTable.put(null, "ddd");
//HashTable 的值不可以为 Null
//hashTable.put("aaa", null);
output(hashTable);
}
}