Map接口常用的几种遍历方式与小练习

Map接口常用的几种遍历方式与小练习

  1. keyset:获取所有的键,我们可以通过键获取值
  2. entryset:获取所有的键值对
  3. values:获取所有的值:此方法只能获取到value,无法获取key
package com.JiHe_.Map_;

import java.awt.print.Book;
import java.util.*;

public class Demo05 {
    public static void main(String[] args) {

        Map hashMap = new HashMap();

        hashMap.put("邓超",new Book1("三国",100));//注意集合内是可以存放对象的
        hashMap.put("邓超","孙俪");
        hashMap.put("三国演义","雷霆嘎巴");
        hashMap.put("三国演义","关羽");
        hashMap.put(null,"jack");
        hashMap.put("红楼",null);
        hashMap.put("琅琊榜","江左梅郎");

        //遍历的几种方法

        //第一组,使用keySet
        //1).通过使用迭代器,因为此时hashMap调用了keySet()方法,生成了一个Set类型的对象,且这个对象的引用指向key,因为它是Set类型所以可以使用迭代器
        Set keyset = hashMap.keySet();
        Iterator iterator = keyset.iterator();
        while (iterator.hasNext()) {
            Object next =  iterator.next();
            System.out.println(next+"-"+hashMap.get(next));
        }
        System.out.println("==================================");
        //2).增强for循环
        for (Object key :keyset){
            System.out.println(key+"-"+hashMap.get(key));
        }

        System.out.println("=====================================");

        //第二组:把所有values取出,只能取出所有的value,无法去取key
        Collection values = hashMap.values();
        //1.使用迭代器
        Iterator value = values.iterator();
        while (value.hasNext()) {
            Object o =  value.next();
            System.out.println( o);
        }
        //2.使用增强for循环
        System.out.println("---------------------------");
        for (Object n1:values){
            System.out.println(n1);
        }

        //第三组,通过entrySet,来获取K-V
        System.out.println("************通过entrySet*********");
        Set set = hashMap.entrySet();//entrySet<Entry<key,value>>

        //迭代器
        Iterator iterator1 = set.iterator();

        while (iterator1.hasNext()) {
            Object n2 =  iterator1.next();//此时n2本来应该是object类型,但由于它最终指向了set,set又指向了hashMap,所以n2实际上还是指向Node类型
            //我们若想要n2使用get方法来获取key与value,就应该吧n2向下转型变为Map.Entry类型
            Map.Entry n5=(Map.Entry)n2;
            System.out.println(n5.getKey()+" "+n5.getValue());
        }

        System.out.println("111111111111111111111111111111");
        //2.增强for
        for (Object o1:set){
            //要将o1转化成Map.Entry
            Map.Entry n3 = (Map.Entry)o1;
            System.out.println(n3.getKey()+"-"+n3.getValue());
        }
    }
}
class Book1{
    private String name;
    private int prive;

    public Book1(String name, int prive) {
        this.name = name;
        this.prive = prive;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getPrive() {
        return prive;
    }

    public void setPrive(int prive) {
        this.prive = prive;
    }
}

练习作业

  • 使用HashMap添加3个员工对象,
  • 要求:键:员工id;值:员工对象
  • 并且遍历显示 工资>18000的员工(便历方式至少两种)
  • 员工类:姓名,工资,员工id
package com.JiHe_.Map_;

import com.sun.jmx.snmp.SnmpUnknownAccContrModelException;

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

public class xiTi {
    public static void main(String[] args) {
        //+ 使用HashMap添加3个员工对象,
        //+ 要求:键:员工id;值:员工对象
        //+ 并且遍历显示 工资>18000的员工(便历方式至少两种)
        //+ 员工类:姓名,工资,员工id

        HashMap hashMap = new HashMap();

        hashMap.put(1,new staff("张飞",30000,1));
        hashMap.put(2,new staff("刘备",20000,2));
        hashMap.put(3,new staff("关羽",15000,3));

        //方法一使用keySet方法
        Set set = hashMap.keySet();
        //拿到所有的key
        for (Object o:set){
            //通过所有的key获得hashMap中的Value,此时想要获得Value中的工资wages,就需要把hashMap.get(o)转型为staff对象,通过该对象就可调用getWages方法
            staff a1 = (staff)hashMap.get(o);
            if (a1.getWages()>18000){
                //比较结束后输出比较通过的对象
                System.out.println(a1);
            }
        }

        //方法二使用entrySet()方法
        Set set1 = hashMap.entrySet();

        Iterator iterator = set1.iterator();
        while (iterator.hasNext()) {
            //对next对象进行转型,称为Map.Entry对象后,就能使用getKey,与getValue方法
            Map.Entry next = (Map.Entry)iterator.next();
            //使用next.getValue()获取Value,为了使获取的Value能够取到具体的工资值,再向下转型为staff,
            staff value =(staff) next.getValue();
            if (value.getWages()>18000){
                //输出比较通过的value
                System.out.println(value);
            }
        }
    }
}
class staff{

    private String name;
    private double wages;
    private int id;


    public staff(String name,int wages,int id){
        this.name =name;
        this.wages=wages;
        this.id=id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getWages() {
        return wages;
    }

    public void setWages(double wages) {
        this.wages = wages;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    @Override
    public String toString() {
        return "staff{" +
                "name='" + name + '\'' +
                ", wages=" + wages +
                ", id=" + id +
                '}';
    }
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玥骋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值