package com.qfedu.fmmall.controller;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Test {
public static void main(String[] args) {
List<String> listData1 = new ArrayList<>();
for (int i = 0; i < 10000; i++) {
listData1.add("aaaa" + i);
}
List<String> listData2 = new ArrayList<>();
for (int i = 0; i < 10000; i++) {
listData2.add("aaaa" + i);
}
time(listData1, listData2);
}
private static void time(List<String> listData1, List<String> listData2) {
long start, end;
start = System.currentTimeMillis();
getListEq(listData1,listData2);
// getListMapEq(listData1, listData2);
end = System.currentTimeMillis();
System.out.println("start time:" + start + "; end time:" + end + "; Run Time:" + (end - start) + "(ms)");
}
private static void getListEq(List<String> listData1, List<String> listData2) {
Map<String, Object> map = new HashMap<>();
for (String s : listData1) {
for (String s1 : listData2) {
//二个list比较相同就添加
if (s.equals(s1)) {
map.put(s, s);
}
}
}
System.out.println(map.size());
}
private static void getListMapEq(List<String> list1, List<String> list2) {
Map<String, String> map = new HashMap<>();
Map<String, String> hashMap = new HashMap<>();
for (String s : list2) {
hashMap.put(s, s);
}
for (String s : list1) {
//map和list比较相同就添加
if (hashMap.containsKey(s)) {
String o = hashMap.get(s);
map.put(o, o);
}
}
System.out.println(map.size());
}
}
案例一:项目中双List数据比较,相同就提取保存(逻辑简单)。使用双循环是450多ms,
案例二:项目中利用空间换时间,把需要比较少的数据源提取成Map结构(逻辑较否则)利用Map中方法比较相同就保存,效率是15ms