Java (SonarQube)LinkedHashMap和S1640(告诉您使用EnumMap)
我可能会错过一些东西,但声明LinkedHashmap: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(); 结果: “键为枚举值的映射应替换为
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存在并不意味着它们需要一直使用。例如,当您有两个“相关”的对象时,您必须确保它们一起更新。这增加了复杂性。非常正确。对有些人来说,声纳是一本圣经。但事实并非如此。这是一个很好的工具,但我们应该始终保持平衡