Map集合的遍历 [Java]

遍历Map集合

首先,我们知道在Collection(单列集合)中有两种遍历方式

  • 其实在Collection中的List中我们有三种遍历方式
    • 因为我们的List集合是有序的,所以我们就多了一种使用普通for循环遍历的方式,因为List集合是有序的,所以List集合中就设置了索引,这个时候我们就可以通过索引去遍历,就和数组一样,也就是使用普通for循环的方式
  • 而我们的Collection集合中的Set集合中就只有三种遍历方式
    • 因为我们的Set集合是无序的,所以就没有索引,也就没有使用普通for循环遍历的方式,也就是Set集合中只有两种遍历的方式,就是加强for循环的方式和使用iterator迭代器迭代的方式

所以也就是我们Collection集合遍历的方式共用的有两种

  1. 使用加强for循环的方式
  2. 使用iterator迭代器的方式

那么为什么使用可以使用加强for循环和使用Iterator迭代器的方式来遍历Collection集合?

  1. 我们来分析为什么可以使用加强for循环来遍历Collection集合?
    • 因为我们的Collection接口继承了Iterable接口
      • 实现了Iterable接口的类都可以使用加强for循环(也就是foreach循环进行遍历)
  2. 我们来分析为什么可以使用Iterator迭代器来遍历Collection集合?
    • 因为我们的Iterator迭代器就是专门为了遍历Collection集合而创建出来的
      • 也就是一个专业的Collection集合遍历器
      • Iterator迭代器就是为了遍历Collection集合而创建的,所以我们当然可以使用迭代器来遍历Collection集合

那么我们的Map集合要如何来遍历?

  • 这个时候我们首先要分析
    1. 我们没有一个专门遍历Map集合的工具类
    2. 我们的Map接口中也没有继承Iterable接口,这个时候我们的Map集合也就不能使用加强for循环遍历
  • 但是我们又知道我们的Map集合中
    1. key可以使用Set集合进行存储的
    2. value可以使用Collection集合进行存储的
    3. key ---- value键值对(也就是Entry对象)可以使用Set集合进行存储
      • 所以我们根据上面这三条性质,我们的Map类中就提供了一些方法,三个方法分别可以将我们的key存储到Set集合中并且将这个Set集合返回,将我们的value存储到Collection集合中并且将这个Collection集合返回,将我们的key — value键值对(也就是Entry对象)存储到Set集合中,然后将这个Set集合返回4
      • 然后我们就得到了存储着key的Set集合,存储着value的Collection集合,以及存储着key ---- value键值对的Set集合,这个时候我们就可以使用遍历Set集合和遍历Collection集合的方式来间接的遍历Map集合

遍历Map集合中的key:

  • KeySet();
    • 返回调用这个方法的Map对象的key构成的Set集合

eg:

package com.ffyc.测试;

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

public class Demo1 {
    public static void main(String[] args) {
        HashMap h = new HashMap();
        h.put(123,"aa");
        h.put(124,"bb");
        h.put(123,"cc");
        h.put(1243,"aa");
        Set set = h.keySet();
        Iterator i = set.iterator();
        while(i.hasNext()){
            /*
            由于我们上面的HashMap集合中的key都是Integer类型的数据,这个时候我们就可以放心的将我们的
            next()方法的Object类型的返回值转型为Integer类型,这个时候我们可以直接转为int类型,这个其实就是
            一种优化,我们这里的向下转型其实按理说两边都要是引用类型,但是由于我们向下转型为Integer类型之后
            我们也可以直接自动拆箱为int类型,所以java官方就提供了这种优化,可以转为int类型
             */
            int x = (int)i.next();
            System.out.println(x);
        }
    }
}

遍历Map中的value

  • values();
    • 将我们的value存储到一个Collection集合中,并且将这个Collection集合返回

eg:

package com.ffyc.测试;

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

public class Demo2 {
    public static void main(String[] args) {
        HashMap h = new HashMap();
        h.put(123,"aa");
        h.put(124,"bb");
        h.put(123,"cc");
        h.put(1243,"aa");
        Collection collection = h.values();
        Iterator i = collection.iterator();
        while(i.hasNext()){
            String x = (String)i.next();
            System.out.println(x);
        }
    }
}

遍历Map中的Entry对象(也就是键值对)

  • entrySet();
    • 返回调用这个方法的Map对象中的Entry对象构成的Set集合

eg:

package com.ffyc.测试;

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

public class Demo3 {
    public static void main(String[] args) {
        HashMap h = new HashMap();
        h.put(123,"aa");
        h.put(124,"bb");
        h.put(123,"cc");
        h.put(1243,"aa");
        Set set = h.entrySet();
        Iterator i = set.iterator();
        while(i.hasNext()){
            Entry entry = (Entry)i.next();
            System.out.println(entry.getKey() + "------>" + entry.getValue());
        }
    }
}
  • 这里我们使用了Map. Entry接口中的两个方法
    1. getKey();
      • 获取这个Entry对象中的key值
    2. getValue();
      • 获取这个Entry对象中的value值

补充:

如果我们只是想得到key和value的遍历,我们可以直接通过keySet()方法得到Key对应的Set集合,然后我们使用key,将这个key作为参数传递到get()方法中去就可以得到这个key对应的value了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值