2012-12-03 161 views
0

我需要创建一个未定义大小的数组,其中将包含用户信息。未知大小的多维数组

例如:

user[0]["name"] = "Patrick"; 

然而,标准的Java阵列似乎需要一个已知的长度,这不知道。

我可以用什么替代? (我会很高兴地看到一些编码示例)我正在使用TCP框架(),它不允许使用构造函数传递对象。因此,据我所见,制作User对象是不可能的。

+4

你可能会存储'ArrayList '其中'Person'包含属性'name'。 –

+0

使用'ArrayList' – andreih

+0

只需要注意,kryonet DOES允许你使用构造函数传递对象,它只需要有一个空的()构造函数。 –

回答

2

在java中我们只能用整数值细胞指数。

我猜你正在寻找的地图列表:

List<Map<String, String>> persons = new ArrayList<Map<String, String>>(); 

// add Patrick 
Map<String, String> person = new HashMap<String, String>(); 
person.put("name", "Patrick"); 
person.put("age", "23"); 
persons.add(person); 

// add Sue 
person = new HashMap<String, String>(); 
person.put("name", "Sue"); 
person.put("age", "21"); 
persons.add(person); 

要访问的所有名称,例如:

for (Map<String, String> person:persons) { 
    System.out.println(person.get("name")); 
} 
+0

这绝对是我需要的。但是,我不能添加多个人,它只是覆盖其他人。我如何为此添加多个人? :-) –

+0

每个人“是”列表中的地图。只需为每个新人创建一张新地图并将其添加到列表(人员)中即可。我在最后一行添加了Patrick。 –

+0

我无法让它工作。你能否扩展你的榜样以包含第二人? –

0

你不能在Java中使用关联数组。换句话说,你不能使用“名称”作为关键。

但是你可以不这样做指定大小创建空数组:

String[] array = new String[]{}; 

但是,试图把东西放到这个数组会给你一个indexoutofbound例外

3

首先,你应该使用对象而不是arbitary数据结构,如果你不知道的大小,我会用一个列表

List<Person> people = new ArrayList<Person>(); 
people.add(new Person("Patrick")); 
+0

问题是,我的Player类有一个构造函数,我使用的TCP框架(Kryonet)不允许发送 –

+0

你不能发送任何对象,即使是一个String通过TCP的对象。你必须以某种方式序列化/编码它。我会定义你的班级,并将其作为一个单独的考虑序列化。 –

+0

我开发框架序列化程序无法处理具有构造函数的对象:-) –

0

你应该考虑创建一个类(如人)和只使用一个List来管理它。你可以做这样的事情:

List<Peson> myLyst = new ArrayList<Person>(); 
Person person = new Person("Patrick"); 
myList.add(0, person);