HashMap和HashTable使用键-值(key-value)来映射和存储数据,将键映射到值的对象,其中键和值都是对象,键必须唯一,但值可以重复。
它们的区别如下:
1、HashTable是线程安全的,HashMap是非线程安全的,效率比HashTable的要高,但是在多线程场合要手动同步HashMap。
2、HashTable的键和值都不允许有null值存在,而HashMap则允许。
它们的区别如下:
1、HashTable是线程安全的,HashMap是非线程安全的,效率比HashTable的要高,但是在多线程场合要手动同步HashMap。
2、HashTable的键和值都不允许有null值存在,而HashMap则允许。
3、HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。
基本用法:
import java.util.*;
public class HashMapDemo {
public static void main(String arg[]) {
HashMap<String, Integer> hm = new HashMap<String, Integer>();
//添加元素
hm.put("a", 1);
hm.put("b", 2);
hm.put("c", 3);
hm.put("c", 3);//键值重复编译不会报错,但运行的结果size()还是3
//Key的个数
int size = hm.size();
System.out.println(size);
/*
3
*/
//获得HashMap中的键和值
Set keys = hm.keySet();
Iterator keysIter = keys.iterator();
while (keysIter.hasNext())
{
String key = (String)keysIter.next();
int value = (int) hm.get(key);
System.out.println(key+"--"+value);
}
/*
b--2
c--3
a--1
*/
//获得HashMap中的值
Collection values = hm.values();
Iterator valuesIter = values.iterator();
while (valuesIter.hasNext())
{
System.out.println("值: " + valuesIter.next());
}
/*
值:2
值:3
值:1
*/
//判断是否已存在Key
boolean b1 = hm.containsKey("a");
System.out.println(b1);
/*
true
*/
//判断是否已存在Value
boolean b2 = hm.containsValue(1);
System.out.println(b2);
/*
true
*/
}
}