Map中的方法
整理了下Java中Map的结构画了个图, 虚线表示接口, 实线表示类
Map继承关系图

Map基本操作
int size(): 返回map大小boolean isEmpty(): 是否为空Mapboolean containsKey(Object key): 是否包含keyboolean containsValue(Object value): 是否包含valueV get(Object key): 返回key对应的value, 没有则返回nullV put(K key, V value): key和value都可为null, key重复则替换旧的valuevoid putAll(Map<? extends K, ? extends V> m):V remove(Object key): 移除并返回, 若不包含key返回nullvoid clear(): 清空mapSet<K> keySet(): 返回key的集合Collection<V> values(): 返回value的集合Set<Map.Entry<K, V>> entrySet(): 返回Entry集合
HashMap与HashTable
- Hashtable是线程安全的,而HashMap不是线程安全的
- Hashtable不允许null作为key和value,而HashMap则可以使用null作为key和value
- Hashtable很古老, 从JDK1.0就有了, 不建议使用
HashMap与IdentityHashMap
IdentityHashMap认为两个key相等: 两个key严格相等(key1 == key2)HashMap则认为两个key相等:key1.equals(key2)且hashCode相同
LinkedHashMap
LinkedHashMap可以记住key-value对的添加时的顺序
SortedMap接口和TreeMap
内置比较器(Comparator),可比较前后顺序, TreeMap默认按照自然顺序排序, 不允许null作为key
EnumMap
EnumMap只接受枚举类作为key, 不允许null作为key
Properties
Properties继承HashTable, 还有几个其他常用方法:
String getProperty(String key): 获取指定key对应的value值String getProperty(String key, String defaultValue): 有默认值Object setProperty(String key, String value): 调用Hashtable的put方法.void load(InputStream inStream): 从属性文件加载key-value对void store(OutputStream out, String comments): 将当前的所有key-value对输出到指定属性文件,小心乱码loadFromXML(InputStream in): 从XML中加载配置storeToXML(OutputStream os, String comment): 写到XML文件中storeToXML(OutputStream os, String comment, String encoding): 写到XML中, 可以指定编码
Map的选择
- 若要保留插入时的顺序, 可用
LinkedHashMap - 若要求key完全匹配(同一对象),可用
IdentityHashMap - 若要排序,可用
TreeMap, 它在底层采用红黑树来管理key-value对
关于null
Hashtable的key、value均不能为nullTreeMap与EnumMap不允许key为nullHashMap、IdentityHashMapkey可以为null, 但不建议这样做
