Map接口
Map中的每个成员方法由一个关键字(key)和一个值(value)构成。Map接口不直接继承于Collection接口,因为它包装的是一组成对的“键-值”对象的集合,而且在Map接口的集合中也不能有重复的key出现,因为每个键只能与一个成员元素相对应。
一、Map接口的子接口以及主要实现类有:
子接口:Bindings、ConcurrentMap、ConcurrentNavigableMap、MessageContext、LogicMessageContext、NavigableMap、SOAPMessageMap、SortedMap
实现类:AbstractMap, Attributes, AuthProvider, ConcurrentHashMap, EnumMap,ConcurrentSkipListMap,HashMap, Hashtable, IdentityHashMap, LinkedHashMap, PrinterStateReasons,Properties, Provider, RenderingHints, SimpleBindings, TabularDataSupport,TreeMap, UIDefaults,WeakHashMap
二、Map接口中定义的方法清单:
Map中定义的方法说明:
在Map接口中定义的通用方法并不是很多。
(1)添加和删除Map中的某个元素
put(K, V):将给定的“键-值”对放入到给定的Map当中
putAll(Map<? extends K, ? extends V):将指定的Map中的“键-值”对放入到给定的Map当中
remove(Object key):从该集合中移除指定的对象,并返回对应的value
clear():清空Map中的所有对象
(2)查询与Map有关的数据
int size():返回此Map中“键-值”对的个数
boolean isEmpty():判断此Map中“键-值”对的个数是否为0
boolean containsKey(Object key):测试此Map中是否有该key
boolean containsValue(Object value):测试此Map中是否包含该value
V get(Object key):通过指定的key查询Map中对应的value
Collection<Object value> values():取得Map中所有的value
Set<Object key> keySet():取得当前Map中key的集合
Set<Entry<K, V>> entrySet():取得当前Map中entry的集合
三、HashMap与Hashtable的区别:
Hashtable实现Map接口,继承自古老的Dictionary类,实现一个key-value的键值映射表。任何非空的(key-value)均可以放入其中。
区别主要有三点:
1、Hashtable是基于陈旧的Dictionary实现的,而HashMap是基于Java1.2引进的Map接口实现的;
2、Hashtable是线程安全的,而HashMap是非线程安全的,我们可以使用外部同步的方法解决这个问题。
3、HashMap可以允许你在列表中放一个key值为null的元素,并且可以有任意多value为null,而Hashtable不允许键或者值为null。
四、遍历MAP的四种方法:
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>();
map.put("1", "value1");
map.put("2", "value2");
map.put("3", "value3");
// 第一种:普遍使用,二次取值
System.out.println("通过Map.keySet遍历key和value:");
for (String key : map.keySet()) {
System.out.println("key= " + key + " and value= " + map.get(key));
}
// 第二种
System.out.println("通过Map.entrySet使用iterator遍历key和value:");
Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, String> entry = it.next();
System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
}
// 第三种:推荐,尤其是容量大时
System.out.println("通过Map.entrySet遍历key和value");
for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
}
// 第四种
System.out.println("通过Map.values()遍历所有的value,但不能遍历key");
for (String v : map.values()) {
System.out.println("value= " + v);
}
}