映射
Map用于存储一个由关键字(key)和它们的值(value)组成的条目集合。Map把关键字映射到相应的值,关键字必须是独一无二的,但是不同的关键字也可以对应相同的值。因此,值不需要独一无二。
HashMap中的关键字是无序的,TreeMap中的关键字是有序的。
Map可以作为一个序偶(pair)的Set实例来实现,它的比较器或者equals/hashCode的实现仅仅涉及关键字。Map接口不是扩展自Collection,它是自己独立存在的。
下面是一个TreeMap的使用实例:
package chapter02;
import java.util.Collection;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
public class MapTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建一个TreeMap
Map<String,Integer> date = new TreeMap<String,Integer>();
//添加键值对
date.put("Monday", 1);
date.put("Tuesday", 2);
date.put("Wednesday", 3);
date.put("Thursday", 4);
date.put("Friday", 5);
date.put("Saturday", 6);
date.put("Sunday", 7);
System.out.println("date.get(\"Monday\"):" + date.get("Monday"));
System.out.println("\nThe map is: ");
//打印输出TreeMap
printMap("date", date);
System.out.println("\nThe keys are: ");
//得到键的集合
Set<String> keys = date.keySet();
//打印输出键
printStringCollection(keys);
System.out.println("\nThe values are: ");
//得到值的集合
Collection<Integer> values = date.values();
//打印输出值
printIntCollection(values);
//删除特定的键值对
date.remove("Tuesday");
//或
/*keys.remove("Tuesday");
values.remove(2);*/
//打印输出删除操作完成后的TreeMap
System.out.println();
System.out.println("After Tuesday and 2 unlisted are removed.");
System.out.println("The map is: ");
printMap("date", date);
}
/**
* 打印输出键
* @param keys
*/
private static void printStringCollection(Set<String> keys) {
// TODO Auto-generated method stub
Iterator<String> itr = keys.iterator();
while(itr.hasNext()){
System.out.print(itr.next() + " ");
}
}
/**
* 打印输出值
* @param values
*/
private static void printIntCollection(Collection<Integer> values) {
// TODO Auto-generated method stub
Iterator<Integer> itr = values.iterator();
while(itr.hasNext()){
System.out.print(itr.next() + " ");
}
System.out.println();
}
/**
* 打印输出TreeMap
* @param string
* @param date
*/
private static <KeyType, ValueType> void printMap(String string, Map<KeyType, ValueType> date) {
// TODO Auto-generated method stub
System.out.println(string + ":");
Set<Map.Entry<KeyType, ValueType>> entries = date.entrySet();
for(Map.Entry<KeyType, ValueType> thisPair : entries){
System.out.print(thisPair.getKey() + ":");
System.out.print(thisPair.getValue() + "\n");
}
}
}
运行结果:
/************************************************************************/
date.get("Monday"):1The map is:
date:
Friday:5
Monday:1
Saturday:6
Sunday:7
Thursday:4
Tuesday:2
Wednesday:3
The keys are:
Friday Monday Saturday Sunday Thursday Tuesday Wednesday
The values are:
5 1 6 7 4 2 3
After Tuesday and 2 unlisted are removed.
The map is:
date:
Friday:5
Monday:1
Saturday:6
Sunday:7
Thursday:4
Wednesday:3
/************************************************************************/