簡體   English   中英

從 java 中的 arraylist 中刪除對象

[英]Removing objects from an arraylist in java

我在從 class 中的 arraylist 中刪除 class 對象時遇到問題。

package more_java;

import java.util.ArrayList;

public class PiggyBank {
    private static ArrayList<Coin> coins = new ArrayList<Coin>();
    
    public PiggyBank(ArrayList<Coin> coins) {
        PiggyBank.coins = coins;
    }
    
    public static void addNickel(){coins.add(new Nickel());}
    public static void addDime(){coins.add(new Dime());}
    public static void addQuarter(){coins.add(new Quarter());}
    public static void addLoonie(){coins.add(new Loonie());}
    public static void addToonie(){coins.add(new Toonie());}
    
    public static void removeNickel() {coins.remove(Nickel());}
    public static void removeDime(){coins.remove(Dime());}
}

Nickel、Dime、Quarter、Loonie 和 Toonie 都是 class 對象,作為抽象 class 硬幣的擴展。 這些硬幣中的每一個都只包含一個訪問器方法GetValue() ,它只返回每個硬幣的值。 問題來自我得到錯誤的刪除方法:方法 Nickel() 對於PiggyBank類型是未定義的。 任何幫助將非常感激。

通常,當您想從 List 中刪除 object 時,您需要在對象的 class 聲明中覆蓋equalshashCode 否則,列表將不知道如何比較內容的現有實例。

但在這種情況下,五分錢、一角硬幣等不會改變它們的價值(不是雙關語)。 因此,如果您始終使用相同的singleton實例來添加或刪除值,則無需覆蓋這些方法。 這是如何完成的。 僅顯示五分錢和一角錢。

public class PiggyBank {
    
    private static ArrayList<Coin> coins = new ArrayList<Coin>();
    final static Nickel NICKEL = new Nickel();
    final static Dime DIME = new Dime();
    
    public static void main(String[] args) {
        addNickel();
        addNickel();
        addDime();
        addDime();
        System.out.println(coins);
        removeDime();
        System.out.println(coins);
        removeNickel();
        System.out.println(coins);
        coins.add(new Quarter());
        coins.remove(new Quarter());  // won't remove quarter as it is
                                      // a different instance.
        System.out.println(coins);
    }
    
    public static void addNickel() {
        coins.add(NICKEL);
    }
    
    public static void addDime() {
        coins.add(DIME);
    }
    
    public static void removeDime() {
        coins.remove(DIME);
    }
    
    public static void removeNickel() {
        coins.remove(NICKEL);
    }
    
}

abstract class Coin {
    public String toString() {
        return getClass().getSimpleName();
    }
}

class Nickel extends Coin {
}

class Dime extends Coin {
}
class Quarter extends Coin {}

所以沒有必要繼續創建各種貨幣價值的實例。 如果您嘗試刪除它們的新實例,將找不到它們。 也許更好的方法是使用enum

enum Coins { NICKEL, DIME, QUARTER}

您可以在Java 教程中更詳細地查看它們。

試試這個,你可以在 remove 方法中使用 instanceof 鍵:

for(Coin coin: coin){ if(coin instanceof Nickel){ coin.remove(coin); } }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM