如果我有一个对象列表(~200 个元素),其中只有很少的唯一对象(~20 个元素)。
我只想拥有独特的价值观。之间list.stream().collect(Collectors.toSet()) and list.stream().distinct().collect(Collectors.toList())
哪个对于延迟和内存消耗更有效?
虽然答案非常明显 - 不要担心这些少量元素的速度和内存消耗的细节and事实上,一个人返回一个Set
另一个List
;有一些有趣的小细节(有趣的IMO)。
假设您正在从已知的源进行流式传输distinct
,在这种情况下你的.distinct()
操作将是 NO-OP;因为实际上不需要做任何事情。
如果您从List
(这是按照设计顺序的)并且没有中间操作(unordered
例如)改变顺序,.distinct()
将被迫保留订单,通过使用LinkedHashSet
内部 - 相当昂贵。
如果您正在进行并行处理,list.stream().collect(Collectors.toSet())
版本将合并多个HashSet
s(在 9 中,这比 8 略有改进),.distinct()
另一方面,将旋转ConcurrentHashMap
这将用一个假钥匙来保存所有钥匙Boolean.TRUE
价值(它也做了一些有趣的事情来保存null
您的流可能有 - 即使在两种情况下内部处理方式也不同)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)