Map中的方法
整理了下Java中Map的结构画了个图, 虚线表示接口, 实线表示类
Map继承关系图
![Map继承关系图](/assets/map-CaNMWzHS.png)
Map基本操作
int size()
: 返回map大小boolean isEmpty()
: 是否为空Mapboolean containsKey(Object key)
: 是否包含keyboolean containsValue(Object value)
: 是否包含valueV get(Object key)
: 返回key对应的value, 没有则返回null
V 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
、IdentityHashMap
key可以为null, 但不建议这样做