1

我在尝试启动一个 arraylist 时遇到了麻烦,我想在其中的第一列是一个字符串,而第二列是一个自定义对象。

例如column [0]beStringcolumn[1]be Integer。创建多维数组列表的约定尝试,如那些使用的int[][]String[][]似乎不起作用的:(我欢迎任何帮助。在这一点上,我认为它不是java允许的。我可以让它只适用于一种类型对象,但这不是我想要的。谢谢!

4

4 回答 4

2

你需要一个数组列表吗?你可以创建一个Map<String, Object>Map<String, Integer>或任何你需要的东西..

于 2013-07-18T02:18:10.873 回答
1

当然可以,但是您削弱/消除了类型检查:

Map myMap<String>, Integer> myData = new HashMap<String, Integer>();

现在您的字符串列表可以通过 检索myMap.keySet(),值可以通过 检索myMap.values()。每个都返回一个Set,您可以使用以下代码轻松地将其转换为List :

List<String> strings = new ArrayList<String>(myMap.keySet()); // get your strings
List<Integer> numbers = new ArrayList<Integer>(myMap.values(); // get your numbers

祝你好运,如果您遇到问题,请发表评论。

于 2013-07-18T02:19:36.633 回答
1

数组适用于一种特定类型的事物- 无论是它们Object还是Stringint。尽管您向它们添加了多个维度,但它们仍然只保存一种类型的信息。

你宁愿拥有的是两个对象之间的映射。这允许您执行以下操作:

  • 将任何键关联到特定值
  • 消除重复的键条目
  • 比数组索引更容易访问

这是一个例子。假设您的自定义对象是 a Cat,并且您希望将所有者的名称映射到特定的Cat. 您创建一个Map的新实例。

Map<String, Cat> catOwners = new HashMap<>();

然后,您可以将元素放入其中...

catOwners.put("Jamie", new Cat("Tycho"));

...并相对轻松地检索它们。

Cat currentCat = catOwners.get("Jamie"); // gets Jamie's cat

如果你真的Map.Entry想要,你甚至可以使用所有Maps提供的对象来迭代它们:

for(Map.Entry<String, Cat> element : catOwners.entrySet()) {
    System.out.println(element.getKey()
        + " owns " + element.getValue().getName());
}
于 2013-07-18T02:27:31.767 回答
0

您可以做的是使用泛型Object类型,并相应地进行转换。

于 2013-07-18T02:18:39.987 回答