【踩坑记录】Java中List.addAll()是浅拷贝引发的一系列问题

记:被List的拷贝卡了一天

为了避免重复连接数据库,所以决定用copy List的方法来提升效率。但是发现List.addAll()是浅拷贝,即改变一个List,另一个List也会跟着变化,由此引发的bug找了一天时间…

接下来看代码

		    contractCount2.clear(); // 清空列表
//		    contractCount2.addAll(new ArrayList<>(contractCount));
//		    contractCount2 = contractCount.stream().collect(Collectors.toList());
		    
//			contractCount2 = psr08_01RepositoryImpl.getContractList(model);
		    
//		    for(Psr08_01ContractCountModel model1: contractCount){
//		    	contractCount2.add(model1);
//		    }
		    try {
		    	ObjectMapper objectMapper = new ObjectMapper();
			    String json = objectMapper.writeValueAsString(contractCount);
			    contractCount2 = objectMapper.readValue(json, new TypeReference>(){});
		    } catch (JsonProcessingException e){
		    	e.printStackTrace(); 
		    }

尝试了很多种方法,都是浅拷贝(因为被拷贝的List对象中还套了一个List),最终是利用Json的序列化来实现的,但是在数据量大的时候可能会影响效率,所以还需要慎重考虑。

接下来有空的时候会尽量研究一种效率更高的List.addAll方法。

你可能感兴趣的:(Java开发,java,list)