本篇是Collection与Map学习笔记第三篇,主要来总结Map接口及其实现类。
1.Map综述
Map接口用来储存“键值对”。Map接口主要有四个实现类:HashMap、TreeMap、Hashtable、WeakHashMap.
Map的子接口有:AbstractMap、SortedMap、NavigableMap.
AbstractMap是个抽象类,继承了Map大部分接口。
SortedMap除集成Map的接口以外,还可以进行排序。排序利用的方法是比较器(Comparator).所以实现SortedMap的类储存的是有序的键值对。
NavigableMap是SortedMap的子接口,除了可以排序以外,还提供了一系列导航方法:如"获取大于/等于某对象的键值对"、“获取小于/等于某对象的键值对”等等。
HashMap继承了AbstractMap,但没有实现Navigable接口,存储的是“键值对,但无序”。
TreeMap继承了AbstractMap,还实现Navigable接口,存储的是“键值对,并且有序”。
Hashtable集成了Dictionary,并实现了Map接口。存储的是“键值对,但无序”。与HashMap相比,Hashtable是线程安全的。并且支持通过Enumeration遍历。
WeakHashMap也继承与AbstractMap,与HashMap不同的是WeakHashMap的键是“弱键”。
1.1Map接口的API
clear() 清除对象中所有元素
put(k,v) 将一个键值对加入键值对集合。
putAll(Map<> map> 讲一个键值对集合放入
entrySet() 键值对集合的所有键值对的Set集合
keySet() 键值对集合的key 的Set集合
values() 键值对集合的value集合,返回值类型为Collection
size() 键值对集合的大小
isEmpty() 键值对集合是否为空
get(key) 通过key获得对应的value
remove(key) 删除对应key的键值对
containskey(key) 是否包含key
containsvalue(value) 是否包含value
hashCode() 获得哈希值
equals(Object obj) 判断是否相等
1.2Map.Entry
Map.Entry是Map内部的接口,Map.Entry是键值对。Map的实现类对象,可以通过entrySet()方法获得键值对集合。然后可以利用Map.Entry提供方法获得key/value/重置value等操作。
常用方法有:
getKey()
getValue()
setValue(newvalue)
hashCode()
equals(Object obj)
1.3Map的遍历方式
Map的实现类有三种遍历方法,分别是对键值对集合进行遍历、对键集合进行遍历、对值集合进行遍历。下面以HashMap类对象为例说明
a.对键值对集合进行遍历
//假设map为HashMap类对象,key类型为String,value类型为Integer
Iterator iter=map.entrySet().iterator();
String key=null;
Integer integ=null;
while(iter.hasNext()){
Map.Entry entry=(Map.Entry)iter.next();
key=entry.getKey();
integ=entry.getValue();
}
b.通过键集合进行遍历
Iterator iter=map.keySet().iterator();
String key=null;
Integer integ=null;
while(iter.hasNext()){
key=iter.next();
integ=map.get(key);
}
c.通过值集合进行遍历
Iterator iter=map.values().iterator();
Integer integ=null;
while(iter.hasNext()){
integ=iter.next();
}
2.HashMap
HashMap继承自AbstractMap,存储的键值对为无序的键值对。
HashMap是最基本Map实现类,具有上文Set接口所属的功能,在此不再赘述。
3.TreeMap
TreeMap继承自AbstractMap/NavigableMap,存储的价值对,且是有序的。
3.1构造函数
a.HashMap() 创建一个空的HashMap对象
b.HashMap(Comparator<> c> 利用某个比较器创建一个HashMap对象
c.HashMap(Map<> map) 带Map的构造器,其中map是创建的对象的一个子集
d.HashMap<SortedMap<> map) 带SortedMap的构造器,其中map是创建的对象的一个子集
3.2常用方法
a.firstEntry() lastEntry() lowerEntry() higherEntry() floorEntry() ceilingEntry() poolFirstEntry() poolLastEntry()
上述方法都是通过继承NavigableMap类获得的,都是获得一个键值对,及返回值类型为Map.Entry。
firstEntry() 返回第一个键值对
lastEntry() 返回最后一个键值对
lowerEntry(k) 返回一个键是小于k的,且是最大的一个键的键值对
higherEntry(k) 返回一个键是大于k的,且是最小的一个键的键值对
floorEntry(k) 返回一个键是小于等于k的,且是最大的一个键的键值对
ceilingEntry(k) 返回一个键是大于等于k的,且是最大的一个键的键值对
poolFirstEntry() 删除并返回第一个键值对
poolLastEntry() 删除并返回最后一个键值对
b.firstKey() lastKey() lowerKey() higherKey() floorKey() ceilingKey()
这些方法都是用来获取key。方法和a类的获取键值对类似,在此不再赘述。
c.反向函数
descendingMap() 获取一个反向的TreeMap
descendingEntrySet() 获取一个反向的键值对集合
d.集合函数
entrySet() keySet( ) values()
e.Map接口函数
clear() size() put() putAll() remove() get() containsKey() containsValue() isEmpty()
3.3遍历方法
遍历方法为通用遍历方法即:遍历键值对、遍历键、遍历值
4.Hashtable
Hashtable继承自Dictionary,并实现了Map接口,储存的也为键值对,且为无序的。与HashMap不同的是,Hashtable为线程安全的,并且可以通过美居Enumeration遍历。
4.1Hashtable的构造器
Hashtable() 创建一个空的构造器
Hashtable(int initialCapacity) 创建一个初始容量为initialCapacity的构造器
Hashtable(Map<> map) 利用map创建一个Hashtable对象
4.2常用方法
a.Map方法
clear() put() putAll() isEmpty() get() size() remove() containsKey() containsValue()
b.集合方法
entrySet() keySet() values()
c.枚举方法
elements() keys()
4.3遍历方法
遍历键值对集合、遍历键集合、遍历值集合、遍历键枚举、遍历值枚举
a.遍历键值对集合
String key=null;
Integer integ=null;
Iterator iter=table.entrySet().iterator();
while(iter.hasNext()){
Map.Entry entry=(Map.Entry)iter.next();
key=entry.getKey();
integ=entry.getValue();
}
b.遍历键集合
String key=null;
Integer integ=null;
Iterator iter=table.keySet().iterator();
while(iter.hasNext()){
key=inter.next();
integ=hashtable.get(key);
}
c.遍历值集合
Integer integ=null;
Iterator iter=table.valuest().iterator();
while(iter.hasNext()){
integ=iter.next();
}
d.遍历值枚举
Enumeration enum=table.elements();
while(enum.hasMoreElements()){
System.out.println(enum.nextElement();
}
e.遍历键枚举
Enumeration enum=table.keys();
while(enum.hasMoreElements()){
system.out.println(enum.nextElement());
}