[英]Java ArrayList size() method return 0 instead of actual length of the ArrayList
我正在學習 Java 並遵循這樣的教程:
package segovia.java.learn;
import java.util.ArrayList;
public class GroceryList {
private ArrayList<String> groceryList = new ArrayList<String>();
public void addGroceryItem(String item) {
groceryList.add(item);
}
public void printGroceryList() {
System.out.println("You have " + groceryList.size() + " items in your grocery list.");
for (int i=0; i < groceryList.size(); i++) {
System.out.println((i+1) + ". " + groceryList.get(i));
}
}
public int getLength(){
return groceryList.size();
}
}
package segovia.java.learn;
public class Main {
public static void main(String[] args) {
GroceryList myGroceries = new GroceryList();
myGroceries.addGroceryItem("apple");
myGroceries.addGroceryItem("orange");
myGroceries.addGroceryItem("pork");
myGroceries.addGroceryItem("beef");
myGroceries.printGroceryList();
System.out.println(myGroceries.getLength());
}
}
效果很好。 但是,我認為由於myGroceries
是 ArrayList,所以它應該具有 .size .size()
方法。 所以我添加了一行
System.out.println(myGroceries.size());
但 IntelliJ 告訴我它不起作用。 所以我認為也許我應該使用 inheritance 所以我改為
public class GroceryList extends ArrayList {
現在.size()
方法正在工作,但它給了我一個錯誤的值。
最終代碼是這樣的:
package segovia.java.learn;
import java.util.ArrayList;
public class GroceryList extends ArrayList{
private ArrayList<String> groceryList = new ArrayList<String>();
public void addGroceryItem(String item) {
groceryList.add(item);
}
public void printGroceryList() {
System.out.println("You have " + groceryList.size() + " items in your grocery list.");
for (int i=0; i < groceryList.size(); i++) {
System.out.println((i+1) + ". " + groceryList.get(i));
}
}
public int getLength(){
return groceryList.size();
}
}
package segovia.java.learn;
public class Main {
public static void main(String[] args) {
GroceryList myGroceries = new GroceryList();
myGroceries.addGroceryItem("apple");
myGroceries.addGroceryItem("orange");
myGroceries.addGroceryItem("pork");
myGroceries.addGroceryItem("beef");
myGroceries.printGroceryList();
System.out.println(myGroceries.getLength());
System.out.println(myGroceries.size());
}
}
getLenth()
給了我 4,這是正確的,而 .size( .size()
給了我 0,這顯然是錯誤的。
誰能幫我理解為什么代碼會這樣工作? 我猜它與 class inheritance 有關,但不確定。
我認為 inheritance 與組成存在誤解。 在這種情況下,在您添加extends ArrayList
到GroceryList
之前,您的GroceryList
有一個 list 。 這就是為什么.size()
沒有處理它的原因,因為您定義的GroceryList
沒有size
方法。 它確實有一個名為groceryList
的列表。 這就是為什么在您addGroceryItem
之后, getLength
方法可以正常工作的原因。 它的大小與groceryList
。
添加extends ArrayList
后, GroceryList
現在是ArrayList
,這就是它現在有size
方法的原因。 但它與groceryList
不是同一個列表。 因此獲得myGroceries
的大小,在addGroceryItem
沒有給你你期望的大小之后。 因為您從未向ArrayList
的myGroceries
添加任何內容。 您只將東西添加到了groceryList
中的一個字段的myGroceries
中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.