Java 从ArrayList中删除元素

Java 从ArrayList中删除元素,java,arraylist,Java,Arraylist,我正在尝试将“选择”元素从指针[1]复制到指针[0]。 我可以使用以下代码成功执行此操作: for(Card card : hands[1].cards) { if (card.suit().ordinal() == 0){ hands[0].addSingleCard(card); //hands[1].removeSingleCard(card); } } 不幸的是

我正在尝试将“选择”元素从指针[1]复制到指针[0]。 我可以使用以下代码成功执行此操作:

       for(Card card : hands[1].cards) {
          if (card.suit().ordinal() == 0){
             hands[0].addSingleCard(card);
             //hands[1].removeSingleCard(card);
             }
       }
不幸的是,我的removeSingleCard方法没有按照我的预期工作。 注释掉后,for each循环成功地将所有“俱乐部”卡从hands[1]复制到hands[0]。我希望removeSingleCard方法能够在复制完每张“俱乐部”卡后将其从手中删除[1]

       public void addSingleCard(Card card){
           if(card!= null){
             cards.add(card);
           }
       }

       public void removeSingleCard(Card c){
           if(c!= null){
             cards.remove(c);
           }
       }

你知道为什么这不起作用吗?

除了通过迭代器,你不能从正在迭代的集合中删除。因此,您可以使用:

for (Iterator<Card> iterator = hands[1].cards.iterator();
     iterator.hasNext(); ) {
    Card card = iterator.next();
    if (card.suit().ordinal() == 0) {
        hands[0].addSingleCard(card); // Or hands[0].cards.add(card);
        iterator.remove();
    }
}

除了通过迭代器之外,不能从正在迭代的集合中删除。因此,您可以使用:

for (Iterator<Card> iterator = hands[1].cards.iterator();
     iterator.hasNext(); ) {
    Card card = iterator.next();
    if (card.suit().ordinal() == 0) {
        hands[0].addSingleCard(card); // Or hands[0].cards.add(card);
        iterator.remove();
    }
}
我假设您得到一个ConcurrentModificationException,因为您在for循环中迭代时正在从集合中删除。 您应该使用迭代器。remove

我假设您得到一个ConcurrentModificationException,因为您在for循环中迭代时正在从集合中删除。
你应该使用迭代器。删除

Ah尼斯:这太棒了。这正是我想要达到的。非常感谢。我一定要记住这一点:DAh nice:这太棒了。这正是我想要达到的。非常感谢。我一定要记住这一点:d card.suit.ordinal==0测试是单向的。只需使用card.suit==suit.CLUBS。如果以不同的顺序定义西装,请使用枚举中的第0个元素。任何对Enum.ordinal的使用都会引起怀疑。card.suit.ordinal==0测试是不规则的。只需使用card.suit==suit.CLUBS。如果以不同的顺序定义西装,请使用枚举中的第0个元素。使用Enum.ordinal应引起怀疑。