Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何有效地将枚举对象用作地图数据结构中的键?_Java_Map_Enums - Fatal编程技术网

Java 如何有效地将枚举对象用作地图数据结构中的键?

Java 如何有效地将枚举对象用作地图数据结构中的键?,java,map,enums,Java,Map,Enums,是否有一种更高效、更专门的映射集合实现,可以使用枚举对象作为键?最近,我无意中在Java API中找到了答案,才学会了这一点。如果有一个使用枚举作为键的映射,请确保使用。它非常简单,效率更高: public interface LibraryItem{ ... } public enum LibraryItemType{ BOOK, CD, VHS, AUDIO; ... } Map<LibraryItemType, NavigableSet<LibraryItem>>

是否有一种更高效、更专门的映射集合实现,可以使用枚举对象作为键?

最近,我无意中在Java API中找到了答案,才学会了这一点。如果有一个使用枚举作为键的映射,请确保使用。它非常简单,效率更高:

public interface LibraryItem{ ... }

public enum LibraryItemType{ BOOK, CD, VHS, AUDIO; ... }

Map<LibraryItemType, NavigableSet<LibraryItem>> itemsByType =
    new EnumMap<>(LibraryItemType.class);
公共接口库项目{…}
公共枚举库项目类型{BOOK、CD、VHS、AUDIO;..}
映射项ByType=
新的EnumMap(LibraryItemType.class);
是。正是这样,;
Map
接口的有效实现,其中键类型必须是枚举:

从:

类枚举映射

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

用法示例:

Map<MyEnum, String> map = new EnumMap<MyEnum, String>(MyEnum.class);
Map Map=newenummap(MyEnum.class);

顺便说一句,写起来更简单:

Map<MyEnum, String> map = new EnumMap<>(MyEnum.class);
Map Map=newenummap(MyEnum.class);

没有必要重复这些类型。这可以使代码更易于阅读。

除了EnumMap之外,还有EnumSet,它也很有用。是的。。。答复前请检查现有答案。这是一个自我回答的帖子。所以你,1。张贴一个你知道答案的简单问题。2.立即自己写一个不完整的答案。3.否决其他答案,因为你觉得这不知何故是“你要回答的问题”?我不明白。。为什么?为了名誉?虽然我支持你的困惑,当然也反对OP的否决票,但我认为没有必要对
EnumMap
给出另一个答案。(这就是为什么我删除了我的:)我写了我的答案,因为我不明白为什么之前的答案包括LibraryItem接口和LibraryItem的NavigableSet来说明EnumMap的使用。如果我知道OP对这个问题的答案不感兴趣,我显然就不会费心了1) 阅读常见问题解答,自我回答帖子没有错。我之所以发表这篇文章,是因为我知道EnumMap并不广为人知,我认为如果很多开发人员意识到它的存在,它将对他们有益。2) 我的回答并不是“半生不熟”,因为它包含了一个示例以及到API的链接。我唯一的错误是在一个地方使用LibraryItem而不是LibraryItemType,这实际上是由Donal修复的,谢谢Donal抓住了这个机会。就我所知,你的回答是多余的。。。但这就是为什么社区为我们解决这样的争端。