如何在Java中洗牌/随机化枚举集中的元素?

如何在Java中洗牌/随机化枚举集中的元素?,java,list,collections,enums,set,Java,List,Collections,Enums,Set,我有这样一个枚举集: EnumSet<Fruit> otherFruits = EnumSet.complementOf(CURRENT_FRUIT); EnumSet otherFruits=EnumSet.complementOf(当前水果); 我想洗牌otherFruits中的元素 是否有任何方法可以在此枚举集中洗牌/随机化元素?如果可能的话,我不想把它转换成列表。谁也能举个例子 我正在使用Java 7。集合没有可修改的顺序。您需要将其转换为列表或其他集合类型。集合没有可修

我有这样一个枚举集:

EnumSet<Fruit> otherFruits = EnumSet.complementOf(CURRENT_FRUIT);
EnumSet otherFruits=EnumSet.complementOf(当前水果);
我想洗牌
otherFruits
中的元素

是否有任何方法可以在此枚举集中洗牌/随机化元素?如果可能的话,我不想把它转换成列表。谁也能举个例子


我正在使用Java 7。

集合没有可修改的顺序。您需要将其转换为
列表
或其他集合类型。

集合没有可修改的顺序。您需要将其转换为
列表
或其他收集类型。

否,如果不转换为其他数据类型(如数组或列表),则无法执行此操作。内部
EnumSet
不保留顺序:它只存储所用枚举常量的位掩码。这样速度更快,占用的内存量也很低

要解决您的问题,您可以使用
ArrayList

List<Fruit> fruits = new ArrayList<>(otherFruits);
Collections.shuffle(fruits);
列出水果=新的ArrayList(其他水果);
收藏。洗牌(水果);

不,如果不转换为其他数据类型(如数组或列表),则无法执行此操作。内部
EnumSet
不保留顺序:它只存储所用枚举常量的位掩码。这样速度更快,占用的内存量也很低

要解决您的问题,您可以使用
ArrayList

List<Fruit> fruits = new ArrayList<>(otherFruits);
Collections.shuffle(fruits);
列出水果=新的ArrayList(其他水果);
收藏。洗牌(水果);

我明白了。那么,我将如何有效地使用列表执行此操作?如果可能的话,你能举个例子吗?我明白了。那么,我将如何有效地使用列表执行此操作?如果可能,您可以提供一个示例吗?
TreeSet
s和
LinkedHashSet
s确实有一个定义良好的顺序。例如
TreeSet
s和
LinkedHashSet
s确实有一个定义良好的顺序。