创建没有变量的新Object数组

时间:2014-03-27 19:29:43

标签: java oop

我是一名学习Java的学生。

我越了解面向对象编程,就越发现自己创建了新对象的数组:

ArrayList<kitten> sackOfKittens = new ArrayList<kitten>();
String[] kittenNames = new String[10]; 
//fill kittenNames with cute strings like "flufftown" and "Indie Rocker"

for(int i = 0; i < 10; i++) {
    sackOfKittens.get(i) = new Kitten(kittenNames[i]);
}

这对我来说很有趣,因为现在我有了所有这些小猫,我显然会做些什么,而且没有直接引用它们,或者没有我指定的变量。

我是否只需要习惯flufftown甚至kitten1已消失但sackOfKittens.get(1)等同于此的想法?

写出来更有意义。

我猜一个人只是在小猫课上编写方法来做所有混乱的事情就是这样。

我错过了什么吗?

2 个答案:

答案 0 :(得分:1)

您需要放弃必须为您创建的每个对象指定符号的想法。符号(变量名称)在编译时中定义,但您可以编写在运行时创建任意数量对象的程序,而无需事先知道要调用它们的内容。

考虑public static void main(String[] args)。您如何处理为String中的每个args提供变量名称?您可以尝试变得聪明并提前列出一堆变量:

public static void main(String[] args) {
    String s1 = (args.length > 0) ? args[0] : null;
    String s2 = (args.length > 1) ? args[1] : null;
    String s3 = (args.length > 2) ? args[2] : null;
    String s4 = (args.length > 3) ? args[3] : null;
    String s5 = (args.length > 4) ? args[4] : null;
}

但是,如果遇到更多,你会怎么做?如果您需要支持数千个可能的命令行参数,该怎么办?当然,你不可能事先预测到这一点。

事实上,这就是main采用String[]而不是多String次的确切原因。命令行参数的数量不能提前知道,因此需要一个数组。你必须引用它们的唯一方法是通过数组中的索引。


如果没有符号,您可以在数据结构中使用多种查找方法(例如数组,ListMap)。

可以迭代诸如List和数组之类的数据结构。假设您要查找名为kitten的{​​{1}},您可以浏览"puss"中的每个kitten,直到找到您想要的那个:

List

或者,您可以利用强大的kitten pussTheKitten; for (kitten k: sackOfKittens) { if (k.getName().equals("puss")) { pussTheKitten = k; // found it! } } 数据结构,根据一些独特的“键”属性更快更轻松地获取对象:

Map

答案 1 :(得分:0)

我建议您详细了解将Map映射到其值的flufftown。在这种情况下,您可以使用名称作为键。这样您就不必记住1偏移 Map<String, Kitten> map = new HashMap<>(); map.put("flufftown", new Kitten(...));

Kitten myKitten = map.get("flufftown");

然后你可以用同一把钥匙把它拿出来

{{1}}