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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 皮卫凯 于 2012-9-25 10:33 编辑

Map特点
1,Map 集合是一个双列集合,Collectionshi 单列集合。
2,Map 一次存一对元素,通过键值对的形式,键和值有对应关系。Colletion是一次存一个元素。
3,Map集合必须要保证集合中键的唯一性。值可以重复。但必须保证元素的唯一性。不保证元素的唯一性获取就会出问题。

Map集合没有迭代器。迭代器是Collection集合具备的。
那要遍历Map集合中的元素,该怎么遍历呢。

HashMap<String,Integer> m =new HashMap<String,Integer>();
Set<Map.Entry<String,Integer>> entrySet =m.entrySet();
for(<Map.Entry<String,Integer>> entry : entrySet)
{
   sysop{ entry.getKey()+":"+entryValue(); }
}

评分

参与人数 1技术分 +1 收起 理由
王德升 + 1 赞一个!

查看全部评分

5 个回复

正序浏览
Map集合自身不能用迭代器!但是可以通过获取其 键或者键值对的关系 得到的集合!这个集合是一个set集合!可用迭代器去迭代!这样就可以迭代啦!
这个问题在毕老师的视频里也讲到啦!
回复 使用道具 举报
本帖最后由 陈振兴 于 2012-9-25 01:33 编辑

Set<Map.Entry<String,Integer>> entrySet =m.entrySet(); //通过set集合获取了key值
//本来Iterator遍历
Iterator<Map.Entry<String,Integer>> it = entrySet.iterator();

//然后就是常规的while循环,判断集合里面到底有没有数据
while(it.hashNext()){
Map.Entry<String,Integer> entry = Map.Entry<String,Integer>it.next();//这一步就是遍历你的集合数据
System.out.println(entry.getKey()+"::"+entry.getValue());
}

//高级for写着就是方便
for(<Map.Entry<String,Integer>> entry : entrySet) //这是遍历啊
{
   sysop{ entry.getKey()+":"+entryValue(); }
}

评分

参与人数 1技术分 +1 收起 理由
王德升 + 1 赞一个!

查看全部评分

回复 使用道具 举报
可以用3种方法遍历
  1. import java.util.*;

  2. public class Test {
  3.         public static void main(String[] args) {
  4.                 Map<String,Integer> map =new HashMap<String,Integer>();
  5.                 map.put("一", 1);
  6.                 map.put("二", 2);
  7.                
  8.                 workByCollection(map);
  9.                 workByKeySet(map);
  10.                 workByEntry(map);
  11.         }
  12.                 //常规的一种遍历值的方法
  13.             public static void workByCollection(Map<String, Integer> map){
  14.                 Collection<Integer> c = map.values();                
  15.                 for (Iterator<Integer> it = c.iterator(); it.hasNext();) {
  16.                     System.out.println(it.next());
  17.                 }
  18.             }
  19.                
  20.           //利用keyset进行遍历,它的优点在于可以根据你所想要的key值得到你想要的 values
  21.             public static void workByKeySet(Map<String, Integer> map) {
  22.                 Set<String> key = map.keySet();
  23.                 for (Iterator<String> it = key.iterator(); it.hasNext();) {
  24.                     String s = (String) it.next();
  25.                     System.out.println(map.get(s));
  26.                 }
  27.             }
  28.          
  29.             //通过Map嵌套的接口Map.Entry<K,V>,返回此映射中包含的映射关系的 Set 视图
  30.             public static void workByEntry(Map<String, Integer> map) {
  31.                     Set<Map.Entry<String, Integer>> set = map.entrySet();
  32.                 for (Iterator<Map.Entry<String, Integer>> it = set.iterator(); it.hasNext();) {
  33.                     Map.Entry<String, Integer> entry = (Map.Entry<String, Integer>) it.next();
  34.                     System.out.println(entry.getKey() + "--->" + entry.getValue());
  35.                 }
  36.             }
  37.         }
  38.        
复制代码
第三种比较强大也比较常用,楼上已经说啦

评分

参与人数 1技术分 +1 收起 理由
王德升 + 1 赞一个!

查看全部评分

回复 使用道具 举报
我估计你这样得到的会是null
回复 使用道具 举报
Set<Map.Entry<String,Integer>> entrySet =m.entrySet();
Iterator<Map.Entry<String,Integer>>  it=entrySet.iterator();
while(it.hasNext())
{
         Map.Entry<String,Integer>  me=it.next();
        String str=me.getKey();
      Integer inte=me.getValue();
}

评分

参与人数 1技术分 +1 收起 理由
王德升 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马