栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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>

        //迭代器
        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 +
                '}';
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/584663.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号