Set和List集合中contains()方法执行效率问题
Set检索元素效率低下,删除和插入效率高;
List查找元素效率高,插入删除元素效率低。List虽然用get(index)方法查询效率高,但是若用contains方法查询对象元素,Set集合比List效率更高,我们证明出了,Set()的时间复杂度是O(1),而List.contain的时间复杂度是O(n)。
List<Long> searchAttrIds = attrService.selectSearchAttrIds(attrIds);
//Set集合判断包含时间复杂度为o1
Set<Long> setAttrIds = new HashSet<>(searchAttrIds);
//从商品属性关系表中拿到所有的可以被检索的属性数据,并提取出商品需要的attrs
List<SkuEsModel.Attrs> attrsList = attrsBySpuId.stream()
.filter(item -> setAttrIds.contains(item.getAttrId()))
.map(item -> {
SkuEsModel.Attrs attrs = new SkuEsModel.Attrs();
BeanUtils.copyProperties(item, attrs);
return attrs;
}).collect(Collectors.toList());
总结:
在判断集合中是否包含某个元素时 ,如果集合是List,就通过Set的构造方法转为Set集合进行判断