簡體   English   中英

Java動態內存分配(堆)

[英]Java Dynamic Memory Allocation (Heap)

我期望這不是一個問題,因為它涉及面很廣。 我正在自學Java,並且特別關注動態內存分配。 讓我們舉一個非常簡單的例子:假設我有一個非常基本的數據輸入屏幕。 如此基本以至於發生的一切就是用戶輸入一系列的名字,也許是雇員目錄之類的。 在我的JFrame上,我有一個JTextField控件,在其中輸入了這些名稱。 員工人數僅在運行時知道。 用戶輸入一個名稱並按下Enter鍵,該名稱將該名稱提交到內存中並創建一個新對象來存儲下一個名稱(很傻,我知道,但是我想重點關注)。 這樣的事情(不要從字面上理解-我顯然沒有編譯它):

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();
            }
        };
    }
}

我需要幫助的是最后一行。 即使這行得通,也可以說我想打印出輸入名稱的列表。 在我的方法中,我看不到唯一標識每個對象的方法(以便我可以遍歷它們)。

我需要創建一個數組來存儲這些嗎? 但這長度是固定的,並且存在堆棧中。 我寧願找到一種使用堆的方式來允許一個開放式列表。

我應該讀什么以學習如何做? 這肯定是很普通的事情,但是我所讀的書似乎沒有涵蓋它。

謝謝。 我希望我已經解釋得足夠好了,而又不做過多的詳細介紹。

聽起來您想存儲EmployeeList 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

您可以使用數組。 您可能會發現查看Java Collections框架(特別是有關實現的頁面)很有用。

但是,是的,您將需要將對象添加到某種數據結構中,否則在沒有有效引用的情況下, 垃圾收集器將清理它們。

似乎您正在尋找一種數據存儲結構。

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

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

您還可以使用HashMap,它可以按名稱快速搜索您的員工。

暫無
暫無

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

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