【问题标题】:Is it possible to split a integer arraylist in half into 2 separate arraylists? [duplicate]是否可以将整数数组列表分成两半成 2 个单独的数组列表? [复制]
【发布时间】:2022-01-06 06:28:34
【问题描述】:
public class War {

    public static void main(String args[])
    {
            ArrayList<Integer> deck = new ArrayList<>(List.of(2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 
            5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 
            12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14));
        
            // Creates a deck and shuffles it
            Collections.shuffle(deck);
    
            System.out.println(deck);
    
            ArrayList<Integer> player1 = new ArrayList<>();
            ArrayList<Integer> player2 = new ArrayList<>();
    
            System.out.println(player2);
            System.out.println(player1);  
    }    
}

这适用于我的纸牌战争游戏,我想将套牌数组列表分成两半(2 个列表),然后能够将这 2 个列表用作 2 个玩家的卡片。

【问题讨论】:

  • half 是指大小/长度的一半,或者这些值是否重要,也许还有?
  • 将套牌一分为二,还是将套牌分给两名玩家?

标签: java


【解决方案1】:

你可以使用subList:

List<Integer> deck1 = deck.subList(0,deck.size()/2);
List<Integer> deck2 = deck.subList(deck.size()/2,deck.size ());

请注意,这些是原始List 的视图,因此这些子llst 的更改将反映在原始List 中。

如果你想避免这种情况,你可以复制:

List<Integer> deck1 = new ArrayList<>(deck.subList(0,deck.size()/2));
List<Integer> deck2 = new ArrayList<>(deck.subList(deck.size()/2,deck.size ()));

或者,正如 Basil 所说,如果您希望列表是不可变的,请使用:

List<Integer> deck1 = List.of(deck.subList(0,deck.size()/2));
List<Integer> deck2 = List.of(deck.subList(deck.size()/2,deck.size ()));

【讨论】:

  • 对于不可修改的列表,请像这样使用List.ofList.of ( deck.subList( 0 , deck.size() / 2 ) )
猜你喜欢
  • 2021-05-11
  • 2016-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多