面试题

第二题解答答案:

1的代码还可以更简单一点

1.这个时间复杂度为2N

public List<Map<String, Object>> mergeList3(List<Map<String, Object>> list1, List<Map<String, Object>> list2, 
			String fieldName) {
		Map<Object, Map<String, Object>> temp = new HashMap<>();
		list1.forEach(i -> processItem(i, temp, fieldName));
		list2.forEach(i -> processItem(i, temp, fieldName));
		List<Map<String, Object>> resMap = new ArrayList<>(temp.values());
		return resMap;
	}
	
	public void processItem(Map<String, Object> map, Map<Object, Map<String, Object>> resultMap, 
			String fieldName) {
		if(map.get(fieldName) != null) {
			Map<String, Object> objMap = resultMap.get(map.get(fieldName));
			if(objMap != null) {
				objMap.putAll(map);
			}
			else {
				resultMap.put(map.get(fieldName), map);
			}
		}
	}

  

2.这个时间复杂度为N^2

public List<Map<String, Object>> mergeList(List<Map<String, Object>> list1, List<Map<String, Object>> list2, 
		String fieldName) {
	for (int i=0; i<list1.size(); i++) {
		for (int j=0; j<list2.size(); j++) {
			if(list1.get(i).get(fieldName).equals(list2.get(j).get(fieldName))) {
				list1.get(i).putAll(list2.get(j));
			}
		}
	}
	return list1;
}

  

原文地址:https://www.cnblogs.com/Aaronqcd/p/12467483.html