set list的区别以及它们的contains效率问题 您所在的位置:网站首页 containing和contain的区别 set list的区别以及它们的contains效率问题

set list的区别以及它们的contains效率问题

2024-06-02 23:22| 来源: 网络整理| 查看: 265

跟着大神溜代码,有个操作:

List searchAttrIds = attrService.selectSearchAttrs(attrIds); Set idSet = new HashSet(searchAttrIds); List attrList = baseAttrs.stream().filter(item -> { return idSet.contains(item.getAttrId()); }).map(item -> { SkuEsModel.Attrs attrs1 = new SkuEsModel.Attrs(); BeanUtils.copyProperties(item, attrs1); return attrs1; }).collect(Collectors.toList());

他的一个操作让我困惑

为什么Set idSet = new HashSet(searchAttrIds);后再idSet.contains(item.getAttrId()); 为什么不直接list搞起来

折腾:list set区别:

List接口 List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。和下面要提到的Set不同,List允许有相同的元素。除了具有Collection接口必备的iterator()方法外,List还提供一个listIterator()方法,返回一个ListIterator接口,和标准的Iterator接口相比,ListIterator多了一些add()之类的方法,允许添加,删除,设定元素,还能向前或向后遍历。   实现List接口的常用类有LinkedList,ArrayList,Vector和Stack。

Set是一种不包含重复的元素的Collection,即任意的两个元素e1和e2都有e1.equals(e2)=false,Set最多有一个null元素。 很明显,Set的构造函数有一个约束条件,传入的Collection参数不能包含重复的元素。请注意:必须小心操作可变对象(Mutable Object)。如果一个Set中的可变元素改变了自身状态导致Object.equals(Object)=true将导致一些问题。

针对它们的contains: 拜读了大神的实验结论: 大神的实验过程记录如其地址 https://www.cnblogs.com/jiadp/p/9259522.html

他的结论:

总结:使用contains方法查询元素是否存在HashSet要比ArrayList快的多。

回到代码,总结有两个好处: 操作: Set idSet = new HashSet(searchAttrIds); 1.这个操作会过滤掉searchAttrIds的重复元素 2.HashSet.contains 比list.contains效率要高


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有