我的问题是用Java存储人员的详细信息。我查看了Oracle网站主题How to Use Tables,发现可以使用对象数组(2维)来存储细节。
但我的兴趣是创建一个动态对象数组,这样我就可以存储任意数量的数据,并且接受输入来存储用户的这些细节。例如,在程序开始时,我可以指定一个对象数组来保存5条记录,但实际上我想要一个可以添加另一个可用位置的数组,如果我需要添加更多记录(动态)。
有没有办法在java中实现这一点?如果是这样,你碰巧知道我可以开始的任何好地方,也许是一个链接。使用Object数组存储是最佳选择吗?
答案 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可能会提供这样的功能。