[英]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 聲明中覆蓋equals
和hashCode
。 否則,列表將不知道如何比較內容的現有實例。
但在這種情況下,五分錢、一角硬幣等不會改變它們的價值(不是雙關語)。 因此,如果您始終使用相同的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.