0

这不是一个我期望得到具体答案的问题,因为它相当广泛。我正在自学 Java,并且特别关注动态内存分配。让我们举一个非常简单的例子:假设我有一个非常基本的数据输入屏幕。如此基本以至于发生的所有事情都是用户输入一系列名字,可能是员工目录或其他东西。在我的 JFrame 上,我有一个输入这些名称的 JTextField 控件。员工人数仅在运行时才知道。用户输入一个名称并按下回车键,该键将名称提交到内存并创建一个新对象来存储下一个名称(我知道这很傻,但我正在努力集中注意力)。像这样的东西(不要太从字面上理解 - 我显然没有编译这个):

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

我需要帮助的地方在最后一行。即使这可行,假设我想打印出输入名称的列表。在我的方法中,我看不到唯一标识每个对象的方法(以便我可以遍历它们)。

我需要创建一个数组来存储这些吗?但它有一个固定的长度并且存在于堆栈中。我宁愿找到一种方法来使用堆来允许一个开放式列表。

我应该阅读什么来学习如何做到这一点?这一定是一件很常见的事情,但我所拥有的书籍似乎没有涵盖它。

谢谢。我希望我已经很好地解释了这一点,而无需过多详细说明。

4

3 回答 3

2

听起来您想存储 a Listof Employees。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
于 2012-06-16T03:18:22.423 回答
2

你可以使用一个数组。您可能会发现查看 Java Collections框架很有用,尤其是关于实现的页面。

但是,是的,您需要将对象添加到某种数据结构中,否则在没有对它们的有效引用后,它们将被垃圾收集器清理。

于 2012-06-16T03:19:30.237 回答
2

您似乎正在寻找一种数据存储结构。

您可以使用内置数组,该数组实际上存储在 java 的堆中(唯一的问题是您必须跟踪大小并在需要更多空间时重新分配)。

更好的选择是 ArrayList,它内置了在add需要时自动调整大小的方法。

您还可以使用 HashMap,它可以通过姓名快速搜索您的员工。

于 2012-06-16T03:19:40.343 回答