如何从已经创建的数组中创建可变集?

0lvr5msh  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(303)

我已经做了这个数组的卡使用的西装和职级枚举数,但它是不变的。我不能把任何东西从墙上移开 Deck . 我可以用 shuffle 通过使用

void shuffle() {
    List<Card> shuffold = Arrays.asList(cards);
}

我不能用 remove 即使在使用 Arrays.asList(cards) 我不想每次发牌都用一副新牌,只是在开始新牌的时候。我应该做这个吗 DeckArrayList 或者我可以把它转换成一个可变的集合,或者这是可能的?

public class Deck {
    public final Card[] cards;
    public Deck() {
        cards = new Card[52];
        int i = 0;
        for (Suit suit : Suit.values()) {
            for (Rank rank : Rank.values()) {
                cards[i++] = new Card(rank, suit);
            }
        }
    }
}

我已经可以用了 shuffle 但是数组仍然是不变的,因为我不能用它来移除牌组中的第一张牌:

void deal() {
    Collection deal = new ArrayList(Arrays.asList(cards));
    deal.remove(0);
}
dzjeubhm

dzjeubhm1#

主要特点 Arrays.asList 方法是返回的列表由指定的数组支持,因此可以使用 Collections 方法。由于数组的大小是固定的,所以这个列表的大小也是固定的,但是您可以对它进行洗牌或以其他方式进行更改。
要指定返回集合的类型,可以使用Java8 toCollection 方法:

String[] arr = {"A", "B", "C"};

HashSet<String> set = Arrays.stream(arr)
        .collect(Collectors.toCollection(HashSet::new));

set.add("D");

System.out.println(set); // [A, B, C, D]
ny6fqffe

ny6fqffe2#

你可能想让一副甲板成为 List 所以它有一个命令,但这很简单。写吧

List<Card> shuffled = new ArrayList<>(Arrays.asList(cards));

或者如果你真的想要一套

Set<Card> shuffled = new HashSet<>(Arrays.asList(cards));

相关问题