无法将对象删除到ArrayList中

时间:2018-12-13 17:22:59

标签: java arraylist

我不知道如何从ArrayList中删除对象。我知道有删除,但就我而言,它更加复杂。

我有一个ArrayList(listsBlocksRemaining),其中包含打印时放入另一个ArrayList(listBlocksIntoRibbon)中的对象。然后,我想要的是应该从listBlocksRemaining中删除要打印的对象,这里有打印,所以不再有剩余。

这是我的代码:

public void algoGlouton(Graphics g) {

    int offsetX = 13;
    int offsetY = 600;
    int widthAvailable= 0;
    int smallestHeight= 300;
    for(Bloc b : listsBlocksRemaining) {
        if(widthRemaining+b.getWidth () < ribbon.getWidth ()) {
            widthAvailable+= b.getWidth();
             g.setColor(b.getColor());
             g.fillRect(offsetX, offsetY-b.getHeight(), b.getWidth(), b.getHauteur());
             listBlocksIntoRibbon.add(b);
             b.setX(offsetX);
             b.setY(offsetY-b.getHauteur());
             offsetX += b.getLargeur();
        } else {
            for(Bloc b1 : listBlocksIntoRibbon) {
                if(b1.getHauteur() < smallestHeight) {
                    smallestHeight= b1.getHeight();
                }
            }
        }
    }
}

我尝试过这个:

for(int i = 0; i<listsBlocksRemaining.size();i++) {
        for(int j = 0; j<listBlocksIntoRibbon.size();j++) {
            if(listsBlocksRemaining.get(i) == listBlocksIntoRibbon.get(j)) {
                listsBlocksRemaining.remove(i);
            }
        }
}

和这个:

for(int i = 0; i<listsBlocksRemaining.size();i++) {
        Bloc b = listsBlocksRemaining.get(i);
        if(listBlocksIntoRibbon.equals(b)) {
            listsBlocksRemaining.remove(b);
        }
}

私下

2 个答案:

答案 0 :(得分:1)

您无需在listBlocksRemaining中找到对象即可将其删除。您可以通过以下方式从列表中删除该对象:

for( Bloc bloc : listBlocksIntoRibbon )
  listBlocksRemaining.remove(bloc);

甚至:

listBlocksRemaining.removeAll( listBlocksIntoRibbon );

答案 1 :(得分:0)

要在迭代集合时安全地将其从集合中删除,您应该使用迭代器。

尝试一下:

 Iterator<Bloc> itr = listsBlocksRemaining.iterator();
 while(itr.hasNext()){
      Bloc b = itr.next();
      ...
       listBlocksIntoRibbon.add(b);
       itr.remove();
       ...
 }