一、Map接口的特点
import java.util.*;
public class MapSource {
public static void main(String[] args) {
Map map = new HashMap();
map.put("猫", "cat");
map.put("狗", "dog");
//HashMap$Node node = newNode(hash, key, value, null)
//哈希表里存放的是Node<K,V>,Node是HashMap的的内部类(HashMap$Node),并且实现了Entry接口
//为了方便遍历,创建了一个EntrySet集合,用于存放Entry<K,V>
Set set = map.entrySet();
System.out.println(set.getClass()); //HashMap$EntrySet
for (Object obj: set) {
//System.out.println(obj.getClass()); //HashMap$Node
//为了从 HashMap$Node 中取出 k-v,先做一个向下转型
Map.Entry entry = (Map.Entry) obj;
System.out.println(entry.getKey() + " - " + entry.getValue());
}
}
}
二、遍历方式
import java.util.*;
public class MapFor {
public static void main(String[] args) {
Map map = new HashMap();
map.put("猫", "cat");
map.put("狗", "dog");
map.put("猪", "pig");
map.put("只因", "kun");
//第一组:先获得所有的Key ,通过Key取出对应的Value
System.out.println("--------通过key---------");
//keySet() 方法获取所有键,类型是Set
Set keyset = map.keySet();
System.out.println(keyset.getClass()); //HashMap$KeySet
//(1) 增强for
System.out.println("-------第1种方式-------");
for (Object key : keyset) {
System.out.println(key + "-" + map.get(key));
}
//(2) 迭代器
System.out.println("-------第2种方式-------");
Iterator iterator = keyset.iterator();
while (iterator.hasNext()) {
Object key = iterator.next();
System.out.println(key + "-" + map.get(key));
}
//第二组:直接取出value
System.out.println("--------直接获取value---------");
//values() 方法获取所有值,类型是Collection
Collection values = map.values();
System.out.println(values.getClass()); //HashMap$Values
//(1) 增强for
System.out.println("-------第1种方式-------");
for (Object value : values) {
System.out.println(value);
}
//(2) 迭代器
System.out.println("-------第2种方式-------");
Iterator iterator1 = values.iterator();
while (iterator1.hasNext()) {
Object value = iterator1.next();
System.out.println(value);
}
//第三组:通过 EntrySet 来获取 k-v
System.out.println("--------通过EntrySet---------");
Set entrySet = map.entrySet(); //HashMap$EntrySet(EntrySet<Map.Entry<K,V>>)
//(1) 增强for
System.out.println("-------第1种方式-------");
for (Object entry : entrySet) {
//先将 entry 转换成 Map.Entry 类型
Map.Entry m = (Map.Entry) entry;
System.out.println(m.getKey() + "-" + m.getValue());
}
//(2) 迭代器
System.out.println("-------第2种方式-------");
Iterator iterator2 = entrySet.iterator();
while (iterator2.hasNext()) {
Object value = iterator2.next();
//System.out.println(value.getClass()); //HashMap$Node
Map.Entry m = (Map.Entry) value;
System.out.println(m.getKey() + "-" + m.getValue());
}
}
}
输出结果如下: