首页 > 解决方案 > 如何从已创建的数组创建可变集?

问题描述

我已经为花色和等级使用枚举器制作了这组卡片,但它是不可变的。我无法从Deck. 我可以shuffle使用

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

remove即使在使用Arrays.asList(cards)我不想每次发牌时都使用新牌组时,我也不能用来发牌,只有在开始新手牌时。我应该制作Deck一个ArrayList还是可以以某种方式将它转换为一个可变集,或者这甚至可能吗?

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);
}

标签: javaarraysarraylistset

解决方案


您可能希望套牌是 a List,所以它有顺序,但这很容易。写吧

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

或者如果你真的想要一套

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

推荐阅读