Map的分类:
- Hashtable:底层是哈希表数据结构,不可以存入null键和null值,该集合是线程同步的。jdk1.0 效率低
- HashMap:底层是哈希表数据结构,允许使用null值和null键,该集合是不同步的。jdk1.2 效率高。
- TreeMap:底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排序。
拓展:
LinkedHashMap:具有按照插入顺序排序的HashMap,是HashMap 的子类。如果在映射中重新插入键,则插入顺序是不受影响的。
HashMap的方法
void clear()
从此映射中移除所有映射关系。
Object clone()
返回此 HashMap 实例的浅表复制:并不克隆键和值本身。
boolean containsKey(Object key)
如果此映射包含对于指定的键的映射关系,则返回 true。
boolean containsValue(Object value)
如果此映射将一个或多个键映射到指定值,则返回 true。
Set<Map.Entry<K,V>> entrySet()
返回此映射所包含的映射关系的 collection 视图。
V get(Object key)
返回指定键在此标识哈希映射中所映射的值,或者如果对于此键来说,映射不包含任何映射关系,则返回 null。
boolean isEmpty()
如果此映射不包含键-值映射关系,则返回 true。
Set<K> keySet()
返回此映射中所包含的键的 set 视图。
V put(K key, V value)
在此映射中关联指定值与指定键。
void putAll(Map<? extends K,? extends V> m)
将指定映射的所有映射关系复制到此映射中,这些映射关系将替换此映射目前针对指定映射的所有键的所有映射关系。
V remove(Object key)
如果此映射中存在该键的映射关系,则将其删除。
int size()
返回此映射中的键-值映射关系数。
Collection<V> values()
返回此映射所包含的值的 collection 视图。
- get() 可以通过get方法的返回值来判断一个键是否存在。通过返回null来判断
- put() 添加元素,可覆盖相同键里面的值。put方法会返回被覆盖之前的值。如果是第一次添加则返回null。
取出HashMap的方法:
- Set keySet:将map中所有的键存入到Set集合,因为set具备迭代器。取出所有键后,再根据get方法。获取每一个键对应的值。
Set<Integer> mapset = map.keySet(); // 获取键
for(int k : mapset){
System.out.println(map.get(k)); // 通过键,获取值
}
- Set<Map.Entry<k,v>> entrySet:将集合中的映射关系存入到了set集合中,而这个关系的数据类型就是:Map.Entry
for(Map.Entry<Integer, String> en : map.entrySet()){
System.out.println(en.getKey() + ":" + en.getValue());
}
- Collection values:取出map中所有的值。无序!(仅取出字典里的值)
for(Object obj : map.values()){
System.out.println(obj);
}