Map对象的迭代学习

来源:互联网 发布:淘宝详情页设计价格 编辑:程序博客网 时间:2024/04/30 18:03

引用Java SE API中的解释

Interface Map<key,value>:An object that maps keys to values. A map cannot contain duplicate keys; each key can map to at most one value. 

1.输出全部的key

Map类中有keySet()方法可以把该Map中的所有key值放到一个Set中,通过Set的Iterator迭代方法,取出所有的Key值。

 

2.输出全部的value

Map类中有valuese()方法可以把该Map中的value值放到一个Collection中,通过Iterator迭代方法,取出所有的value值。

 

3.输出全部的key-value对值

对于Map接口来说,其本身是不能直接使用迭代(如Iterator、foreach)进行输出的,因为Map中的每个位置存放的是一对值(key→value),而Iterator中每次只能找到一个值。所以,如果非要使用迭代进行输出,则必须按照以下步骤完成(以Iterator输出方法为例):

  • 将Map的实例通过entrySet()方法变为Set接口对象。
  • 通过Set接口实例为Iterator实例化。
  • 通过Iterator迭代输出,每个内容都是Map.Entry的对象。
  • 通过Map.Entry进行key→value的分离 
  • Map中的每对数据都是通过Map.Entry保存的,最终要进行输出也应该使用Map.Entry完成。

例子:

package com.szu.edu.map;

import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class MapTest2 {
 /**
  * @Test Map()用法
  * 作者:zhouhong
  * 时间:2012.09.01
  */
 // public static void work(Map<String, Student> map){
 // Collection<Student> c = map.values();
 // Iterator it = c.iterator();
 // for(; it.hasNext();){
 // System.out.println(it.next());
 // }
 // }
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  // 方法一:通过Set的Iterator迭代方法,取出所有的Key值
  System.out.println("方法一: 输出全部的key对值:");
  Map<String, String> map = new HashMap<String, String>();
  map.put("id1", "wang");
  map.put("id2", "li");
  map.put("id3", "chen");
  map.put("id4", "zhao");
//  map.put("id4", "zhao");
  map.put(null, null);//HashMap()中可以持有:null->null键值对
  Set<String> set = map.keySet();

  for (String s : set) {
   System.out.println(s + " " );
//   System.out.println(s + "," + map.get(s));// map.get()返回指定键所映射的值
  }
  
  //方法二:输出全部的value,通过Map类中的values()方法可以把该Map中的value值放到
  //一个Collection中,通过Iterator迭代方法,取出所有的value值
  System.out.println("方法二: 输出全部的value对值:");
  Collection<String> values = map.values();
  for(String v : values){
   System.out.println(v + " " );
  }
  
  //方法三: 输出全部的key-value对值
  System.out.println("方法三: 输出全部的key-value对值:");
  Set<Map.Entry<String, String>> kv = map.entrySet();
  Iterator<Map.Entry<String, String>> iter = kv.iterator();
  while(iter.hasNext()){
   Map.Entry<String,  String> me = iter.next();
   System.out.println(me.getKey() + " --> " + me.getValue());
  }
 }
}

运行结果:

方法一: 输出全部的key对值:
null
id2
id1
id4
id3
方法二: 输出全部的value对值:
null
li
wang
zhao
chen
方法三: 输出全部的key-value对值:
null --> null
id2 --> li
id1 --> wang
id4 --> zhao
id3 --> chen