java的集合框架中,分为两大类,一类是实现Collection接口的集合,另一类就是实现Map接口的集合。Collection集合大部分都是链表、数组、队列、栈等一对一数据结构的集合,而Map就比较特别,它是属于键值对形式,也是就我们常说的key-value形式的数据存储模型。在Map中,一个key永远对应着一个value,但是一个value可能会对应着多个key。Map中不允许出现重复的key,这是因为我们需要唯一确定一个key,获取它对应的value。更加通俗的来讲,Map只支持根据key来获取value,反之则不行。
Map中元素的顺序是由实现类决定的,有些Map的实现类中,元素的顺序是固定的,比如TreeMap。也有些类中Map的元素顺序是不固定的,比如HashMap。
JDK良心建议,一定小心使用可变对象作为Map的key。
渣渣吐血建议,不要使用可变对象作为Map的key
比如,Map对象可以作为Map的value,但是却不能成为Map的key。
因为Map只是一个接口,所以我们简单介绍一下里面声明的方法和内部类(接口)
Map中元素的数量(键值对的数量/key-value的数量)
int size();
判断是不是一个空Map,说白了,也就是元素数量为0
boolean isEmpty();
判断map中是否存在某个key
boolean containsKey(Object key);
判断map中是否存在某个value
boolean containsValue(Object value);
根据键(key)获取值(value)。一般来说返回key对应的value,如果找不到对应的value就返回null。但是还有一种可能就是你的value本身就为null。
V get(Object key)
像集合内添加/覆盖一个键值对。具体取决于Map是否已经有了一个参数所代表的key。没有的话新增一个key-value。有的话将覆盖
V put(K key, V value);
有添加就会有移除。根据key移除一个键值对,并且返回这个key对应的value
V remove(Object key)
向map中添加多个键值对(或者说一个map对象)。
void putAll(Map<? extends K, ? extends V> m);
删除map内的所有键值对,变成一个空的map
void clear();
获取所有键(key)
Set<K> keySet();
获取所有的值(value)
Collection<V> values()
然后现在再看看内部接口(类)
interface Entry<K,V> {
K getKey();
V getValue();
V setValue(V value);
boolean equals(Object o);
int hashCode();
}
五个方法顾名知义,不再解释。