2012-06-16 48 views
0

這不是一個我期待得到具體答案的問題,因爲它非常廣泛。我自學Java,專注於動態內存分配。讓我們做一個非常簡單的例子:假設我有一個非常基本的數據輸入屏幕。所以發生的基本情況就是用戶輸入一系列名字,可能是員工目錄或其他東西。在我的JFrame中,我有一個單獨的JTextField控件,在這些控件中輸入這些名稱。只有在運行時才知道員工人數。用戶輸入一個名稱並敲擊回車鍵,該回車鍵將名稱提交給內存,並創建一個新對象來存儲下一個名稱(愚蠢,我知道,但我正在嘗試着重)。像這樣的東西(不要太直接 - 我明顯沒有編譯這個):Java動態內存分配(堆)

public class Employee { 
    String fName; 

    public void setName(String n) { 
     fName = n; 
    } 
}; 

public class JFrameEmp { 

//blah, blah, blah 

JTxtName.addKeyListener(new KeyAdapter() { 
    public void keyPressed(KeyEvent e) { 
     /* Handle the enter key */ 
     if (e.getKeyCode() == KeyEvent.VK_ENTER) { 
      /* Store name */ 
      this.setName(JTxtName.getText()); 

      /* Create New Object */ 
      Employee next = new Employee(); 
      } 
     }; 
    } 
} 

我需要幫助的地方在最後一行。即使這是行得通的,假設我想打印出輸入名稱的列表。在我的方法中,我沒有辦法唯一標識每個對象(以便我可以遍歷它們)。

我是否需要創建一個數組來存儲這些數據?但是它有一個固定的長度並且生活在堆棧上。我寧願找到一種方法來使用堆來允許一個開放式列表。

我該讀什麼來學習如何做到這一點?這是一件非常平常的事情,但我所擁有的書似乎沒有涵蓋它。

謝謝。我希望我已經解釋得很清楚,沒有太多細節。

+1

你有沒有看過'Map '界面? – gobernador

回答

2

這聽起來像你想存儲一個ListEmployee s。 Java提供動態大小的數組,其ArrayList類。

下面是一個例子:

ArrayList<Employee> employees = new ArrayList<Employee>(); 
employees.add(new Employee("Alice")); 
employees.add(new Employee("Bob")); 
System.out.println(employees.get(0)); // prints out Alice 
+0

謝謝。我認爲這是繼續下去的方法。 – Alex

2

你可以使用一個數組。您可能會發現查看Java Collections框架很有用,特別是關於implementations的頁面。

但是,您需要將對象添加到某種數據結構中,否則在沒有對它們進行有效引用後,它們將被garbage collector清除。

+0

非常感謝!我很感激。 – Alex

+0

沒問題。此外,如果您想要遍歷對象,這些數據結構的許多Java實現都是可迭代的,這意味着您可以執行[this](http://docs.oracle.com/javase/1.5.0/) docs/guide/language/foreach.html):) – comfortablejohn

2

看來你正在尋找一個數據存儲結構。

您可以使用內置數組,它實際上存儲在java堆中(唯一的問題是當需要更多空間時,必須跟蹤大小並重新分配)。

一個更好的選擇是一個ArrayList,它內置了add方法,可以在需要時自動調整大小。

您也可以使用HashMap,這將允許通過名稱快速搜索您的員工。

+0

非常感謝!我很感激。 – Alex