如何使用不同的对象启动多维arraylist?

时间:2013-07-18 02:14:10

标签: java

我无法尝试启动一个arraylist,其中第一列我想成为一个字符串,第二列是一个自定义对象。

例如column [0]Stringcolumn[1]Integer。惯例创建像int[][]String[][]所使用的那些多维arraylist似乎不起作用:(我欢迎任何帮助。此时我不认为这是java允许的。我可以让它只适用于一种类型的对象,但它不是我想要的。谢谢!

4 个答案:

答案 0 :(得分:2)

你需要一个arraylist吗?您可以创建Map<String, Object>Map<String, Integer>或任何您需要的内容..

答案 1 :(得分: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

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

答案 2 :(得分:1)

数组适用于某种特定类型的事物 - 无论是Object还是String还是int。尽管您正在为它们添加多个维度,但它们仍然只保留一种类型的信息。

您希望拥有的是两个对象之间的mapping。这允许您执行以下操作:

  • 将任何键与特定值相关联
  • 消除重复的密钥条目
  • 更容易访问而非数组索引

这是一个例子。假设您的自定义对象为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 s提供的Map.Entry对象进行迭代:

for(Map.Entry<String, Cat> element : catOwners.entrySet()) {
    System.out.println(element.getKey()
        + " owns " + element.getValue().getName());
}

答案 3 :(得分:0)

您可以使用通用Object类型,并相应地进行投射。