Java集合类(二)
浅谈Map集合
Map没有继承Collection接口。也就是说Map和Collection是2种不同的集合。Collection可以看作是(value)的集合,而Map可以看作是(key,value)的集合。
Map接口由Map的内容提供3种类型的集合视图,一组key集合,一组value集合,或者一组key-value映射关系的集合。
public interface Map<K,V>接口的常用方法:
boolean containsKey(Object key) boolean containsValue(Object value) Set<Map.Entry<K,V>> entrySet() 返回此映射中包含的映射关系的Set视图Set<K> keySet() 返回此映射中包含的键的Set视图put(K key, V value) V remove(Object key) Collection<V> values() 返回此映射中包含的值的Collection视图
1.HashMap
public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable
HashMap是非同步的,并且允许null,即null value和null key。如果多个线程同时访问一个哈希映射,而其中至少一个线程从结构上修改了该映射,则它必须保持外部同步。
Map m = Collections.synchronizedMap(new HashMap(...));
在返回映射的任意 collection 视图上进行迭代时,用户必须手工在返回的映射上进行同步:
Map m = Collections.synchronizedMap(new HashMap()); ... Set s = m.keySet(); // Needn't be in synchronized block ... synchronized(m) { // Synchronizing on m, not s! Iterator i = s.iterator(); // Must be in synchronized block while (i.hasNext()) foo(i.next());}2.LinkedHashMap
LinkedHashMap-扩展HashMap,对返回集合迭代时,具有可预知的迭代顺序。此实现与HashMap的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序通常就是将键插入到映射中的顺序(插入顺序)。
3.TreeMap
TreeMap不是同步的,该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的Comparator进行排序。
4.Hashtable
任何非null对象都可以用作键或值。为了成功地在哈希表中存储和获取对象,用作键的对象必须实现hashCode方法和equals方法,hashCode和equals方法继承自根类Object。Hashtable是同步的。
5.Properties
Properties类用来将Map对象与属性文件关联起来,从而可以将Map对象中的key-value对加入到属性文件,同时也可以将属性文件中的内容加入到Map对象中。
由于属性文件中的“属性名”和“属性值”都是字符串类型,所以Properties文件中的key和value也都是字符串类型。
<<To Be Continued>>