两层For循环的一些性能优化

import JavaBase.User;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

/**
 * @author 633805 LYH
 * @version V1.0
 * @description 对类的描述
 * @create 2019-07-02 20:37
 * @since 1.7
 */
public class ForTest {

    public static void main(String[] args) {


        List<User> list1 = new ArrayList<>();



        List<User> list2 = new ArrayList<>();

        long start = System.currentTimeMillis();

        for (int i =0 ; i< 5000; i++){
            User user = User.builder().name("lyh"+i).age(12 + i).build();

            list1.add(user);
        }

        for (int i =0 ; i< 5000; i++) {

            User user2 = User.builder().age(12 + i).build();

            list2.add(user2);
        }

        //方法一
        /*for (User us : list1 ) {

            for(User user : list2) {
                if (user.getAge() == us.getAge()) {
                    user.setName(us.getName());
                }
            }
        }*/

        //方法二
        /*for(int i =0 ; i < list1.size(); i++) {
            for (int j = 0; j < list2.size(); j++) {
                if (list1.get(i).getAge().equals(list2.get(j).getAge())) {
                    list2.get(j).setName(list1.get(i).getName());
                }
            }
        }*/

        //方法三
        /*int i, j, leni, lenj;
        for( i =0 , leni = list1.size(); i < leni; i++) {
            for ( j = 0, lenj = list2.size(); j < lenj; j++) {
                if (list1.get(i).getAge().equals(list2.get(j).getAge())) {
                    list2.get(j).setName(list1.get(i).getName());
                }
            }
        }*/

        //方法四
        /*Map<Integer, User> map = new HashMap<>();
        for (int i = 0; i < list1.size(); i++) {
            map.put(list1.get(i).getAge(), list1.get(i));
        }

        for (int j =0; j < list2.size(); j ++) {
            //Map<User, Integer> map1 = new HashMap<>();
            //map1.put(list2.get(j), list2.get(j).getAge());

            if (map.get(list2.get(j).getAge()) != null) {
                list2.get(j).setName( map.get(list2.get(j).getAge()).getName() );
            }
        }*/

        //方法五
        Map<Integer, User> map = list1.stream().collect(Collectors.toMap(User::getAge, Function.identity() , (key1, key2) -> key2));

        list2 = list2.stream().map(user -> {
            Integer age = user.getAge();
            User user1 = map.get(age);
            user.setName(user1.getName());
            return user;
        }).collect(Collectors.toList());

        list1.addAll(list2);

        list1.forEach(System.out::println);

        System.out.println(list1.size());

        System.out.println(System.currentTimeMillis() - start);


    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值