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);
        }

這樣效率大大提高了。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章