作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要一些结构来存储 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/
我目前正在开发一个业务应用程序,最终将由 .Net 托管公司托管。托管公司提供 1 个 MSSQL DB(2 个用户)和无限数量的 MySQL DB。购买第二个 MSSQL DB 是不可能的,因为我的
我是一名优秀的程序员,十分优秀!