本帖最后由 聂斌 于 2013-3-19 02:05 编辑
|--Hashtable:底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的。jdk1.0.效率低。 此类实现一个哈希表,该哈希表将键映射到相应的值。任何非 null 对象都可以用作键或值。为了成功地在哈希表中存储和获取对象,用作键的对象必须实现hashCode 方法和 equals 方法。
|--HashMap:底层是哈希表数据结构,允许使用 null 值和 null 键,该集合是不同步的。将hashtable替代,jdk1.2.效率高。除了非同步和允许使用 null 之外,HashMap 类与Hashtable 大致相同。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 键和值都是对象,并且不能包含重复键,但可以包含重复值 ,,,
还有些不同点:
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。
Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。
HashTable使用Enumeration,HashMap使用Iterator。
另外注意下HashMap 对null的处理:
代码:
Map<String,String> map = new HashMap<String,String>();
map.put(null, "sdsd"); //这里可以存key为null,,,,"sdsd")换为null也可以,,,,HashMap集合null是可以作为key存在的,,可以map.put(null, null);get(null)时也返null,,
System.out.println(map.get(null)); //get也可以用null作为key,,如果"sdsd"改为null那么这里也返回null,,,
输出:sdsd
|