我们在开发中常会遇到需要双重for循环遍历的场景,但是从时间复杂度来看如果数据量大的情况下效率极低。 时间复杂度(n的平方)
分享一下对应的解决方案,用map,时间复杂度为n
第一步,创建要你要检索的集合List
第二步,把要筛选的信息写成map集合
第三步,遍历List,用map.get(key)来实现检索
就是这么简单!!!!
//案例代码:思路
//举例:
//1.List信息数据 List<deviceInfoDTO>deviceInfoDTOList
//2.检索条件List<String> nameList的一个名称数组
//第一步:把被检测的List存放到HashMap里面,key用被检索名称,value可以是对象也可以是其他
//这里统计一下该名称下面的信息条数
Map<String, Integer> nameMap = Maps.newHashMap();
deviceInfoDTOList.forEach(deviceInfoDTO -> {
Integer counts = nameMap.get(deviceInfoDTO.getDeviceName());
nameMap.put(deviceInfoDTO.getDeviceName(), counts == null ? 1 : ++counts);
});
//第二步,
//1.创建一个新的 List<deviceInfoDTO>deviceInfoDTOList 存放数据
//2.遍历名称数组,获取你想要检索的name下面的value值
List<deviceInfoDTO> deviceInfoDTONewList =new ArrayList<>();
nameList.foreach(name->{
deviceInfoDTONewList.add(nameMap.get(name))
});
//以上就是双重for循环用map和list的优化方案。
//双重for就是先遍历被检索信息里面再遍历检索条件。然后对比再把对比后的信息存放到新数组里面。
//双重for循环效率是n的平方,数据二十几条就开始慢起来
//所以一般用map优化,缺点是不可检索重复的数据,可以替换成其他可以重复的容器来存放