gpt4 book ai didi

java - 类似于 Java 的 EnumSet 的结构,可以容纳重复的元素

转载 作者:行者123 更新时间:2023-11-29 07:43:09 25 4
gpt4 key购买 nike

我需要一些结构来存储 N 个枚举,其中一些是重复的。并能够轻松提取它们。到目前为止,我已经尝试像这样使用 EnumSet。

cards = EnumSet.of(
BEST_OF_THREE,
BEST_OF_THREE,
SIMPLE_QUESTION,
SIMPLE_QUESTION,
STAR);

但现在我看到它只能各有一个。从概念上讲,哪个结构是解决此问题的最佳结构。

问候何塞

最佳答案

您可以使用 Enumeration -> Integer 类型的 Map,其中整数表示每个有多少。 google guava“MultiSet”会为您完成这项工作,并处理以下极端情况,即在没有条目时向集合中添加枚举,以及在没有留下任何枚举时删除枚举。

另一种策略是使用枚举序数索引。因为这个索引是唯一的,所以您可以使用它来索引一个大小为枚举大小的 int 数组,其中每个数组槽中的计数将指示您拥有的每个枚举的数量。像这样:

// initialize array for counting each enumeration type
// TODO: someone should double check every initial value will be zero
int[] cardCount = new int[CardEnum.values().length];
...

// incrementing the count for an enumeration (when we add)
cardCount[BEST_OF_THREE.ordinal()]++;
...

// decrementing the count for an enumeration (when we remove)
cardCount[BEST_OF_THREE.ordinal()]--;
// DEBUG: assert cardCount[BEST_OF_THREE.ordinal()] >= 0
...

// getting the count for an enumeration
int count = cardCount[BEST_OF_THREE.ordinal()];

... 一段时间后

在阅读了解释 OP 要求的原始帖子下方的澄清评论后,很明显您最好使用线性结构,每个元素都有一个条目。我没有意识到你不需要关于你需要多少的详细信息。将它们存储在 MultiSet 或等效的计数结构中使得随机选择变得困难,因为您需要将从 [0, size) 中随机选择的索引归因于特定容器,这需要日志时间。

关于java - 类似于 Java 的 EnumSet 的结构,可以容纳重复的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28200356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com