大数据量for循环问题:两个list对象集合判断对象属性相同,修改对象属性

需求:假设有一个对象AppRole,一个集合list<AppRole> list,一个集合list<AppRole>list1;

list为全量数据,list1中不是全量,比较两个集合,code相同,list1数据进行更新;

先上代码:

import com.bamboocloud.bpc.repo.entity.AppRole;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

public class test {

    private static class Approle{
        String code;
        String id;
        String state;

        public Approle(String code, String id, String state) {
            this.code = code;
            this.id = id;
            this.state = state;
        }

        public String getCode(){
            return this.code;
        }
        public void setCode(String code) {
            this.code = code;
        }
        public String getId(){
            return this.id;
        }
        public void setId(String id) {
            this.id = id;
        }
        public String getState(){
            return this.state;
        }
        public void setState(String state) {
            this.state = state;
        }
    }

    public static void main(String[] args) {
        List<Approle> list = new ArrayList<>();
        list.add(new Approle("code1","1","0"));
        list.add(new Approle("code2","2","0"));
        list.add(new Approle("code3","3","0"));

        List<Approle> list1 = new ArrayList<>();
        list1.add(new Approle("code2","",""));
        list1.add(new Approle("code3","",""));

        Map<String, Approle> map = new TreeMap<>();
        for (Approle updateAppRole : list1) {
            map.put(updateAppRole.getCode(),updateAppRole);
        }
        for (Approle appRole : list) {
            Approle role = map.getOrDefault(appRole.getCode(),null);
            if(role== null){
                continue;
            }
            role.setId(appRole.getId());
            role.setState("1");
        }
    }
}

​

注意:绝对不能用两个list进行循环去比较,这是最慢的,因为他得比较n*m次,效率最低。

这里采用的是map,利用哈希减一层循环,然后在list循环中根据list的code获取list1的对象,

假如list1循环n次,list循环m次,这样总共的循环次数为n+m次,map的查询速度很快,时间可以忽略不看。

往map中存数据的时候此处用的是TreeMap,考虑到插入比hashMap快。(这块涉及到两个map的底层了,需要了解的自行可以看一看)。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值