A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高廷平 中级黑马   /  2012-8-30 11:51  /  1439 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package Demo_Test;
import java.util.*;
public class Demo_Map {
public static void main(String[] args) {
  //HashMap的对象:hp
  HashMap hp=new HashMap();
  
  //添加对象
  hp.put(200, "高斯");
  hp.put(204, "赵平");
  hp.put(202, "张飞");
  hp.put(205, "刘备");
  
   
   Set set=hp.keySet();//构建所有KEY对象的集合
         //输出集合hp的内容
         Iterator it=set.iterator();
   while(it.hasNext())
       {
       Object obj=it.next();
       System.out.print(obj+" : ");
       System.out.println(hp.get(obj));
       }
  System.out.println("----------------------");
            for(Object obj:hp.keySet())
     {
         Object ob=hp.get(obj);
  System.out.println(obj+" : "+ob);
     }

}

}
/*
* 输出结果:
* 205 : 刘备
204 : 赵平
200 : 高斯
202 : 张飞
----------------------
205 : 刘备
204 : 赵平
200 : 高斯
202 : 张飞
* 上述两种方式都是借助于KeySet和get方法输出的
* 本质上没有多大区别。
* 请问各位:还有什么别的方式吗?
* */

4 个回复

正序浏览
取得Map集合中的内容有两种方法,一种是你所用的keySet,它只获得的是Map集合中的键的集合,也就是说返回此映射中包含的键的 Set 视图。
另一种方法是entrySet,它能返回Map集合中的键和值,也就是 返回此映射中包含的映射关系的 Set 视图。
举个例子:
你们班30个学生,每个学生都有学号,姓名,那么学号是键,姓名是值
205 : 刘备
204 : 赵平
200 : 高斯
202 : 张飞
这样,你用keySet方法返回的就是学号,而用entrySet获得的就是学号—姓名的映射关系。
你的程序要是用entrySet方法获取元素的话,代码为:
Set<Map.Entry<Integer,String>> entryset = hp.entrySet();               
Iterator<Map.Entry<Integer,String>> it  = entryset.iterator();
while(it.hasNext())
{
    Map.Entry<Integer,String> me = it.next();
    int id = me.getKey();
    String name = me.getValue();
    System.out.println(id+":"+name);
}
回复 使用道具 举报
{:soso_e179:}
回复 使用道具 举报
public class LinkedHashMapDemo {
/**
  * @param args
  */
public static void main(String[] args) {
  HashMap<Integer, String> hm = new LinkedHashMap<Integer, String>();
  hm.put(5, "wangwu");
  hm.put(1, "zhaoliu");
  hm.put(9, "zhouqi");
  hm.put(4, "lisi");
  
//  Set<Integer> keySet = hm.keySet();
  for(Integer i : hm.keySet()){
   String value = hm.get(i);
   System.out.println(i+":"+value);
  }
  
  for(Map.Entry<Integer,String> me : hm.entrySet()){
   Integer key = me.getKey();
   String value = me.getValue();
   System.out.println(key+"::::"+value);
  }
  /*Iterator<Map.Entry<Integer,String>> it = hm.entrySet().iterator();  
  while(it.hasNext()){
   Map.Entry<Integer,String> me = it.next();
   Integer key = me.getKey();
   String value = me.getValue();
   System.out.println(key+":"+value);
  }*/
}
}

EntrySet图解.jpg (68.75 KB, 下载次数: 17)

EntrySet

EntrySet

keySet图解.jpg (42.57 KB, 下载次数: 20)

keySet

keySet
回复 使用道具 举报
还有就是EntrySet(); Map集合取出元素的两种方式 第一种就是您说的那个 ,第二种就是EntrySet();
两种方法的共同特点都是将Map集合转成Set集合进行取出,
而两种方法取出的方式不同而已,
KeySet()方法: 打个比喻 假如有一个小两口, 你知道丈夫是谁,那你一定可以是通过丈夫来找到妻子了。
EntrySet()方法:也打个比喻,加入 你要找一对夫妻, 你知道这一对夫妻的结婚证了 你是不 也是可以找到丈夫 和妻子两个元素哦。
               呵呵  这个,您要自己查阅下API文档 一定很块就总结出来的哦呵呵,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马