整理了下Java中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集合IdentityHashMap
认为两个key相等: 两个key严格相等(key1 == key2
)HashMap
则认为两个key相等: key1.equals(key2)
且hashCode
相同LinkedHashMap
可以记住key-value对的添加时的顺序
内置比较器(Comparator
),可比较前后顺序, TreeMap
默认按照自然顺序排序, 不允许null作为key
EnumMap
只接受枚举类作为key, 不允许null作为key
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中, 可以指定编码LinkedHashMap
IdentityHashMap
TreeMap
, 它在底层采用红黑树来管理key-value对Hashtable
的key、value均不能为nullTreeMap
与EnumMap
不允许key为nullHashMap
、IdentityHashMap
key可以为null, 但不建议这样做