直接合并:
public static void main(String[] args) {
List<UserMeta> userMetas = new ArrayList<>(10000);
List<UserMeta> userMetas2 = new ArrayList<>(10000);
for (int i = 0; i < 10000; i++) {
UserMeta userMeta = new UserMeta();
userMeta.setUserId(i+"");
userMeta.setCellphone("123" + i);
userMetas.add(userMeta);
UserMeta userMeta2 = new UserMeta();
userMeta2.setUserId(i+"");
userMeta2.setCname("张三" + i);
userMetas2.add(userMeta2);
}
for (UserMeta userMeta : userMetas) {
String userId = userMeta.getUserId();
for (int i = 0; i < userMetas2.size(); i++) {
UserMeta userMeta1 = userMetas2.get(i);
String userId1 = userMeta1.getUserId();
if (userId.equals(userId1)) {
userMeta.setCname(userMeta1.getCname());
}
}
}
}
用时 809毫秒
优化后:
public static void main(String[] args) {
List<UserMeta> userMetas = new ArrayList<>(10000);
List<UserMeta> userMetas2 = new ArrayList<>(10000);
for (int i = 0; i < 10000; i++) {
UserMeta userMeta = new UserMeta();
userMeta.setUserId(i+"");
userMeta.setCellphone("123" + i);
userMetas.add(userMeta);
UserMeta userMeta2 = new UserMeta();
userMeta2.setUserId(i+"");
userMeta2.setCname("张三" + i);
userMetas2.add(userMeta2);
}
outside:
for (UserMeta userMeta : userMetas) {
String userId = userMeta.getUserId();
for (int i = 0; i < userMetas2.size(); i++) {
UserMeta userMeta1 = userMetas2.get(i);
String userId1 = userMeta1.getUserId();
if (userId.equals(userId1)) {
userMeta.setCname(userMeta1.getCname());
// 将匹配到的结果从集合中删除 提高效率
userMetas2.remove(i);
// 匹配后跳到下个外循环
continue outside;
}
}
}
}
优化后 耗时 9毫秒, 速度提高 90 倍