如何在Java中存储有关许多人的信息

时间:2010-07-10 05:35:54

标签: java object multidimensional-array dynamic

我的问题是用Java存储人员的详细信息。我查看了Oracle网站主题How to Use Tables,发现可以使用对象数组(2维)来存储细节。

但我的兴趣是创建一个动态对象数组,这样我就可以存储任意数量的数据,并且接受输入来存储用户的这些细节。例如,在程序开始时,我可以指定一个对象数组来保存5条记录,但实际上我想要一个可以添加另一个可用位置的数组,如果我需要添加更多记录(动态)。

有没有办法在java中实现这一点?如果是这样,你碰巧知道我可以开始的任何好地方,也许是一个链接。使用Object数组存储是最佳选择吗?

3 个答案:

答案 0 :(得分:3)

数组包含同源数据,即通常数组中每个单元格中所有内容的类都是相同的。您可能不希望在相同类型的字段中存储人名和鞋号,因此......让我们删除其中一个数组的维度。您应该声明一个名为Person的类,并在其中指定您要为某个人存储的所有属性。完成后,您只需要存储Person的一维数组(或其他内容)。

接下来,请注意数组的大小是固定的。如果要扩展数组,则需要分配一个更大的新数组,将旧数组的内容复制到新数组中,然后继续使用新数组代替旧数组。

这是很多工作,而且容易出错。在Apple的修饰词中,有一个类!较旧的限定类是Vector,这是一个可以存储对象的类,每次向它添加新对象时都会增长。如今,用于此的类(它更高效)是ArrayList。同样的事情:你做

ArrayList<Person> myList = new ArrayList<Person>();

然后你可以重复

newPerson = new Person("Bruce", "Wayne", 1972, "Gotham City");
myList.add(newPerson);

您可以通过

访问列表中的人员
int personNumber = 0;
Person retrievedPerson = myList.get(personNumber);

甚至

for (Person someone : myList) {
   System.out.println(someone);
}

修改

好的,要存储具有ID的人并使用该ID访问它们,假设人员ID是一个整数,一些适当的代码将是:

TreeMap<Integer, Person> myMap = new TreeMap<Integer, Person>();

newPerson = ...
myMap.put(newPerson.getId(), newPerson);

然后你可以用

检索它
Person p = myMap.get(id);

答案 1 :(得分:2)

查看java.util.List,java.util.Map和System.arraycopy,了解一些可以帮助您的数据结构。

答案 2 :(得分:0)

首先你应该明白Object array passed to the JTable won't get stored。它只是用于显示您已完成的记录。要存储您已获得的值,您必须使用文件或数据库。

您可以动态设置对象数组大小,以便您应该知道实际需要显示多少条记录。我认为使用JDK 1.6无法动态更改数组的大小,但即将推出的JDK 7可能会提供这样的功能。