HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。
HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。
Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。
Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。
Map
Map:一次存入一对元素,以键值对(Key , V alue)形式存在,必须保证键的唯一性。
1,添加:
put(K key , V value):返回的是被覆盖的 Value,如果键没有重复,返回的是 null。
2,删除:
remove(key);
clear();
3,获取:value get(key);
也可以用于判断键是否存在的情况。当指定的键不存在的时候,返回的是 null。
对于 HashMap 集合,可以存入 null 键 null 值。
hm.put("haha",null);
hm.get("haha");==>null.//要注意一下。
4,判断:
booleancontainsKey(key);
booleancontainsValue(value);
boolean isEmpty();
5,长度:int size();
6,取出:原理:将 map 合转成 Set 合后,在通过迭代器取出。
Set<k> keySet():将 map 合中所有的键取出存入 set 集合。 再通过 get 方法获取键
对应的值。
Set<Map.Entry<k,v>> entrySet():将 map 集合中的键值映射关系打包成一个对象
Map.Entry 对象。
7
将该对象存入 set 集合。取出是可以通过 Map.Entry 对象的 getKey,getValue 获取
其键和值。
7,获取所有的值。
Collection<v> values();
Map:
|- -Hashtable:底层是哈希表数据结构, 线程是同步的, 不可以存入 null 键, null 值。
效率较低,被 HashMap 替代。
|--HashMap:底层是哈希表数据结构, 线程是不同步的, 可以存入 null 键, null 值。
要保证键的唯一性,需要覆盖 hashCode 方法,和 equals 方法。
|--LinkedHashSet:该子类基于哈希表又融入了链表。 可以 Map 集合进增
删提高效率。
|--T reeMap:底层是二叉树数据结构。可以对 map 集合中的键进行排序。
需要使用 Comparable 或者 Comparator 进行比较排序。return0,来判断
键的唯一性。
其实 set 合,底层使用的就是 map 集合。
Map 集合中有一个特殊的对象是可以和 IO 对象相结合的:Properties。它是 Hashtable
的子类。
该集合对象不存在泛型,键和值都是字符串。
什么时候使用 map 合?当对象之间存在着映射关系时,就要先想到 map 合。