map的应用技巧

前些时间项目遇到一个有意思的问题,让我对map有了一个新的认知,先介绍背景吧:

package com.chen.test;

public class Employee {

    private Integer num;
    private String name;

    public Employee(Integer num, String name) {
        this.num = num;
        this.name = name;
    }

    public Integer getNum() {
        return num;
    }

    public void setNum(Integer num) {
        this.num = num;
    }

    public String getName() {
        return name;
    }

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

    @Override
    public String toString() {
        return "Employee{" +
                "num=" + num +
                ", name='" + name + '\'' +
                '}';
    }
}
    @Test
    public void test01(){
        List<Employee> e1List = new ArrayList<>();
        List<Employee> e2List = new ArrayList<>();

        Employee e1 = new Employee(1,"zhangsan1");
        Employee e2 = new Employee(2,"zhangsan2");
        Employee e3 = new Employee(3,"zhangsan3");
        Employee e4 = new Employee(4,"zhangsan4");

        e1List.add(e1);
        e1List.add(e2);
        e1List.add(e3);

        e2List.add(e1);
        e2List.add(e2);
        e2List.add(e3);
        e2List.add(e4);
    }

        先建立一个基本类,然后创建四个对象,两个集合,将这四个对象存到这两个集合中,可见这两个集合中存的不一致,那问题是找出这两个集合中具有相同对象的员工号并输出。

一般思路是:将这两个集合进行嵌套遍历,内部再用一个if判断,如下:

       for(Employee em1 : e1List){
            for(Employee em2 : e2List){
                if(em2.getNum().equals(em1.getNum())){
                    System.out.println(em2);
                }
            }
        }

这样并没有什么错,但问题是如果这个集合中的元素足够多的话,那么遍历就很耗费时间的。

另外一种思路,就是利用map了,将其中一个集合中的对象的员工号由于不重复作为key,相应的对象作为value存到map中,然后遍历另外一个集合,通过get()方法得到结果:

        Map<Integer,Employee> eMap = new HashMap<>();
        for(Employee ee1 : e1List){
            eMap.put(ee1.getNum(),ee1);
        }
        for(Employee ee2 : e2List){
            Employee employee = eMap.get(ee2.getNum());
            System.out.println(employee);
        }

这样效率大大提高了。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值