【问题标题】:java stream groupingBy with EnumMap or other?java流groupingBy与EnumMap或其他?
【发布时间】:2019-08-02 14:18:36
【问题描述】:

最快最低内存而言,我应该更喜欢哪个版本?

版本 1:

public Map<TYPE, List<Task>> getTaskByType() {
    return tasks.stream()
            .collect(Collectors.groupingBy(Task::getType, 
                     () -> new EnumMap<>(TYPE.class), 
                     Collectors.toList()));
    }

第 2 版:

public Map<TYPE, List<Task>> getTaskByType() {
    return tasks.stream().collect(Collectors.groupingBy(Task::getType));
}

还是其他版本?

编辑:

如果您有很多枚举,请使用 版本 1!

【问题讨论】:

  • 你真的不应该在这里关心这个 - 除非你分析并看到一个实际的问题。我会使用第二个,因为它更容易阅读 IMO
  • @Eugene 但我很关心这一点,而且我已经有一个用于分组的枚举,为什么不寻找最佳实践呢?
  • 最佳实践是通常任何更容易阅读的东西;在大多数情况下,至少
  • EnumMap 的 javadoc 回答了您的问题:这种表示非常紧凑和高效。 * [...] *所有基本操作都在恒定时间内执行。它们可能(尽管不能保证)比 HashMap 对应物更快。。当你想知道 EnumMap 是否比 HashMap 更紧凑和更高效时,为什么不阅读 EnumMap 的文档呢?但同样,这对您的应用的性能或内存消耗产生任何重大影响的可能性非常低。
  • 不,结果不一样。一个生成 HashMap,另一个生成 EnumMap。

标签: java java-stream


【解决方案1】:

您的第二个 sn-p 生成一个 HashMap(尽管这是一个非保证的实现细节)。

所以javadoc of EnumMap回答了你的问题:

这种表示非常紧凑和高效。 [...] 所有基本操作都在恒定时间内执行。它们很可能(尽管不能保证)比它们的 HashMap 对应物更快。

但我同意其他所有评论者的观点:这对您的应用的性能或内存消耗产生任何重大影响的可能性非常低,您应该支持可读性而不是微优化而不是降低它。

【讨论】:

  • 我不同意您和其他评论者的意见。如 javadoc 中所述,在 HashSet 上使用 EnumMap 是有客观原因的。否决我的问题并不正确。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-17
  • 1970-01-01
  • 2022-11-21
  • 1970-01-01
  • 1970-01-01
  • 2017-09-30
  • 2015-09-01
相关资源
最近更新 更多