gpt4 book ai didi

java - 创建不带变量的新对象数组

转载 作者:行者123 更新时间:2023-12-01 13:13:00 24 4
gpt4 key购买 nike

我是一名主要学习 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) 是等效的?

把它写下来可以让其更有意义。

我猜一个人只是在 Kitten 类中编写方法来完成所有困惑的工作,仅此而已。

我错过了什么吗?

最佳答案

您需要放弃必须为您创建的每个对象分配一个符号的想法。符号(变量名称)是在编译时定义的,但您可以编写在运行时创建任意数量对象的程序,而无需提前知道如何调用它们。

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

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 )。

列表和数组等数据结构可以迭代。假设您想找到名为 "puss"kitten,您可以遍历 List 中的每只 kitten 直到您找到了您想要的:

kitten pussTheKitten;
for (kitten k: sackOfKittens) {
if (k.getName().equals("puss")) {
pussTheKitten = k; // found it!
}
}

或者,您可以利用强大的 Map 数据结构,根据某些独特的“键”属性更快、更轻松地获取对象:

Map<String, kitten> mapOfKittens = new HashMap<String, kitten>();
for (kitten k: sackOfKittens) {
mapOfKittens.put(k.getName(), k);
}
kitten pussTheKitten = mapOfKittens.get("puss"); // found it!

关于java - 创建不带变量的新对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22697356/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com