博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
map的应用技巧
阅读量:2347 次
发布时间:2019-05-10

本文共 1865 字,大约阅读时间需要 6 分钟。

前些时间项目遇到一个有意思的问题,让我对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
e1List = new ArrayList<>(); List
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
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); }

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

转载地址:http://fgtvb.baihongyu.com/

你可能感兴趣的文章
可能返回 null 的 SQL 语句
查看>>
以下关于STL的描述中,错误的有
查看>>
假设某棵二叉查找树的所有键均为1到10的整数,现在我们要查找5。下面____不可能是键的检查序列。
查看>>
给定一个整数sum,从有N个无序元素的数组中寻找元素a、b、c、d,使得 a+b+c+d =sum,最快的平均时间复杂度是____。
查看>>
设二叉树结点的先根序列、中根序列和后根序列中,所有叶子结点的先后顺序____。
查看>>
将整数序列(7-2-4-6-3-1-5)按所示顺序构建一棵二叉排序树a(亦称二叉搜索树),之后将整数8按照二叉排序树规则插入树a中,请问插入之后的树a中序遍历结果是____。
查看>>
IP地址、子网掩码、网络号、主机号、网络地址、主机地址
查看>>
已知int a[]={1,2,3,4,5};int*p[]={a,a+1,a+2,a+3};int **q=p;表达式*(p[0]+1)+**(q+2)的值是____。
查看>>
CPU输出数据的速度远远高于打印机的打印速度,为了解决这一矛盾,可采用()
查看>>
整型字符常量和字符字面量的区别 sizeof(char) 和 sizeof('a')
查看>>
表的主键特点中,说法不正确的是()
查看>>
用变量a给出下面的定义:一个有10个指针的数组,该指针指向一个函数,该函数有一个整形参数并返回一个整型数
查看>>
冯诺依曼工作方式的基本特点是____
查看>>
下列关于文件索引结构的叙述中,哪些是正确的?
查看>>
Java异常处理
查看>>
JQueryUI实现对话框
查看>>
Java流(Stream)/文件(File)/IO
查看>>
文件处理(压缩与解压)
查看>>
Java中的目录
查看>>
JQuery实现对select选择框的赋值
查看>>