【问题标题】:Multidimensional array with unknown size未知大小的多维数组
【发布时间】:2012-12-03 10:51:23
【问题描述】:

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

例如:

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

但是,标准的 java 数组似乎需要一个已知的长度,我不知道。

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

【问题讨论】:

  • 您可以存储ArrayList<Person>,其中Person 包含属性name。
  • 请注意,kryonet 确实允许您使用构造函数传递对象,它只需要也有一个空的 () 构造函数。

标签: kryonet java arrays kryonet


【解决方案1】:

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

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

【讨论】:

  • 问题是,我的 Player 类有一个构造函数,我使用的 TCP 框架(Kryonet)不允许发送该构造函数
  • 你不能发送任何对象,即使是通过 TCP 的字符串对象。您必须以某种方式对其进行序列化/编码。我会按应有的方式定义您的类,并将其序列化为单独考虑。
  • 我提到框架序列化程序无法使用构造函数处理对象:-)
  • 有一些方法可以在框架中解决这个问题(我认为这不是一个选项),但通常框架只要求你有一个公共构造函数,而不是它是你唯一的构造函数。
【解决方案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"));
}

【讨论】:

  • 这绝对是我需要的。但是,我不能添加多个人,它只会覆盖其他人。我如何添加多个人? :-)
  • 每个人“都是”列表中的地图。只需为每个新人创建一个新地图并将其添加到列表(人员)中。我在最后一行添加了 Patrick。
  • 我无法让它工作。您能否扩展您的示例以包括第二个人?
【解决方案3】:

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

但是您可以通过以下方式创建空数组而不指定大小:

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

但是,尝试将某些内容放入此数组会导致 indexoutofbound 异常

【讨论】:

    【解决方案4】:

    您应该考虑创建一个类(如 Person)并仅使用 List 来管理它。你可以这样做:

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

    【讨论】:

      猜你喜欢
      • 2019-04-27
      • 2019-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-03
      • 2010-10-06
      • 1970-01-01
      相关资源
      最近更新 更多