这不是我期待具体答案的问题,因为它非常广泛。我正在自学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();
}
};
}
}
我需要帮助的地方是最后一行。即使这是有用的,让我们说我想打印出输入的名字列表。在我的方法中,我认为无法唯一地识别每个对象(以便我可以遍历它们)。
我是否需要创建一个数组来存储这些?但是它有一个固定的长度并且存在于堆栈中。我宁愿找到一种方法来使用堆来允许开放式列表。
我应该阅读什么来学习如何做到这一点?这一定是很常见的事情,但我所用的书籍似乎并没有涵盖它。
感谢。我希望我能够很好地解释这一点,而不需要太多细节。
答案 0 :(得分:2)
听起来你想存储List
Employee
个。 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
答案 1 :(得分:2)
您可以使用数组。您可能会发现查看Java Collections框架非常有用,特别是有关implementations的页面。
但是,是的,您需要将对象添加到某种数据结构中,否则在garbage collector没有有效的引用后,它们将被清除。
答案 2 :(得分:2)
您好像在寻找数据存储结构。
您可以使用内置数组,它实际上存储在java中的堆上(唯一的问题是您需要跟踪大小并在需要更多空间时重新分配)。
更好的选择是ArrayList,它内置了add
个方法,可以在需要时自动调整大小。
您还可以使用HashMap,这样可以通过名称快速搜索您的员工。