Java (SonarQube)LinkedHashMap和S1640(告诉您使用EnumMap)

Java (SonarQube)LinkedHashMap和S1640(告诉您使用EnumMap),java,enums,sonarqube,sonarlint,Java,Enums,Sonarqube,Sonarlint,我可能会错过一些东西,但声明LinkedHashmap: private final LinkedHashMap<anEnum, anInteger> linkedHashMap; 私有最终LinkedHashMap LinkedHashMap; 后来: linkedHashMap = new LinkedHashMap<anEnum, anInteger>(); linkedHashMap=新建linkedHashMap(); 结果: “键为枚举值的映射应替换为

我可能会错过一些东西,但声明LinkedHashmap:

private final LinkedHashMap<anEnum, anInteger> linkedHashMap;
私有最终LinkedHashMap LinkedHashMap;
后来:

linkedHashMap = new LinkedHashMap<anEnum, anInteger>();
linkedHashMap=新建linkedHashMap();
结果:

“键为枚举值的映射应替换为枚举映射” (乌贼:1640)

由于不存在“LinkedEnumMap”,因此应忽略此声明

用于枚举类型键的专用映射实现。全部 枚举映射中的键必须来自单个 在创建映射时显式或隐式指定。枚举 映射在内部表示为数组。此表示是 非常紧凑和高效

基本上这不是一个bug,这是一个很好的建议。每个
Enum
都有其来自声明顺序的顺序。您可以在由
values()
返回的数组中看到它

EnumMap
保持顺序,并将值实际存储在数组中

另一方面,您可以决定哪个收藏更适合您的目的。我相信结合
EnumMap
列表可能会让你感兴趣,但请记住声纳只是一个提示。你可以重新配置你的声纳,告诉它不要显示这种情况

用于枚举类型键的专用映射实现。全部 枚举映射中的键必须来自单个 在创建映射时显式或隐式指定。枚举 映射在内部表示为数组。此表示是 非常紧凑和高效

基本上这不是一个bug,这是一个很好的建议。每个
Enum
都有其来自声明顺序的顺序。您可以在由
values()
返回的数组中看到它

EnumMap
保持顺序,并将值实际存储在数组中


另一方面,您可以决定哪个收藏更适合您的目的。我相信结合
EnumMap
列表可能会让你感兴趣,但请记住声纳只是一个提示。您可以重新配置声纳,并告诉它不要指示这种情况。

问题是:使用EnumMap是一种很好的做法,因此SonarQube会告诉您这样做

但是您明确地选择使用LinkedHashMap,它跟踪插入顺序

因此,这一信息可以解释为:

  • 当您只关心映射枚举时,请使用EnumMap
  • 当您需要映射枚举并关心插入顺序时,您必须使用普通的LinkedHashMap

换句话说:请记住,这些工具只是工具。它们提供信息帮助您做出明智的决策。当您认为当前的实现很好时,不要仅仅因为某个工具提供了这样的“建议”就更改代码。

问题是:使用EnumMap是一种很好的做法,因此SonarQube会告诉您这样做

但是您明确地选择使用LinkedHashMap,它跟踪插入顺序

因此,这一信息可以解释为:

  • 当您只关心映射枚举时,请使用EnumMap
  • 当您需要映射枚举并关心插入顺序时,您必须使用普通的LinkedHashMap

换句话说:请记住,这些工具只是工具。它们提供信息帮助您做出明智的决策。当您认为当前的实现很好时,不要仅仅因为某个工具提供了这样的“建议”就更改代码。

为什么不检查他们的bug数据库呢?你问题的这一部分没有多大意义……你为什么不检查一下他们的bug数据库呢?你问题的这一部分没有多大意义……我同意使用EnumMaps,但我的列表是预先排序的。它应该保持排序状态。我需要LinkedHashMap。我认为推荐一些不可能的东西(因为没有LinkedEnumMap)是。。。一个错误。你不会错过任何表演的。您可以保留已排序的枚举列表,但同时在EnumMap上执行映射。对EnumMap的访问非常有效。LinkedHashMap的目的是,它可以按插入顺序或访问顺序维护键的顺序。它还可以用作LRU缓存。EnumMap总是按照其自然顺序维护其键,因此我认为EnumMap几乎不可能替代LinkedHashMap@EvanDarke它不会取代,但是它可以与一个列表结合使用,以加速计算元素的过程。仅仅因为EnumMaps存在并不意味着它们需要一直使用。例如,当您有两个“相关”的对象时,您必须确保它们一起更新。这增加了复杂性。我同意使用EnumMaps,但我的列表是预先排序的。它应该保持排序状态。我需要LinkedHashMap。我认为推荐一些不可能的东西(因为没有LinkedEnumMap)是。。。一个错误。你不会错过任何表演的。您可以保留已排序的枚举列表,但同时在EnumMap上执行映射。对EnumMap的访问非常有效。LinkedHashMap的目的是,它可以按插入顺序或访问顺序维护键的顺序。它还可以用作LRU缓存。EnumMap总是按照其自然顺序维护其键,因此我认为EnumMap几乎不可能替代LinkedHashMap@EvanDarke它不会取代,但是它可以与一个列表结合使用,以加速计算元素的过程。仅仅因为EnumMaps存在并不意味着它们需要一直使用。例如,当您有两个“相关”的对象时,您必须确保它们一起更新。这增加了复杂性。非常正确。对有些人来说,声纳是一本圣经。但事实并非如此。这是一个很好的工具,但我们应该始终保持平衡