Map的遍历方式
设计的方法
- containKey:查找键是否存在
- keySet:获取所有的键
- entrySet:获取所有的k-v
- values:获取所有的值
@SuppressWarnings({"all"})
public class MapFor{
public static void main(Stirng[] args){
Map map = new HashMap();
//1、先取出key,通过key取出值
Set keyset = map.keySet();
for(Object key: keyset){
System.out.println(map.get(key));
}
//2、通过迭代器
Iterator iterator = keySet.iterator();
while(iterator.hasNext()){
Object next = iterator.next();
Object value = map.get(key);
}
//3、直接取得value
Collection values = map.values();
//使用for、iterator等遍历
//4、通过EntrySet EntrySet<Map.Entry<K,V>>
Set entryset = map.entrySet();
for(Object o: entrySet){
//将entry转为Map.Entry
Map.Entry m = (Map.Entry)entry;
Object key = m.getKey();
Object value = m.getValue();
}
//entryset使用迭代器
Iterator iterator_ = entrySet.iterator();
while(iterator_.hasNext()){
Object next = iterator_.next();
System.out.println(next.getClass());
//这里打印为HashMap$Node,实际上存储的是Node,但是因为Node实现了Entry接口,
//所以可以多态存储在EntrySet当中
//此处next为Object,需要向下转型至Map.Entry
Map.Entry mp = (Map.Entry)next;
Object key = m.getKey();
Object value = m.getValue();
}
}
}
Map底层机制
此部分和HashSet基本相同,HashSet就是基于HashMap实现的,HashSet 的元素实际上是 HashMap 的 key,而 HashMap 的 value 是一个固定的占位对象(PRESENT)