gpt4 book ai didi

java - Java 中是否有可扩展的对象引用列表?

转载 作者:行者123 更新时间:2023-11-29 06:48:11 25 4
gpt4 key购买 nike

在Java中,我们总是可以使用数组来存储对象引用。然后我们有一个 ArrayList 或 HashTable,它们可以自动扩展以存储对象。但是有没有人知道拥有一个自动扩展的对象引用数组的 native 方法?

编辑:我的意思是我想知道 Java API 是否有一些类能够存储对对象的引用(但不像 XXXList 或 HashTable 那样存储实际对象)和自动扩展的能力。

最佳答案

根据其定义,Java 数组的大小是固定的。如果您需要自动增长,请使用 XXXList 类。

编辑 - 问题已经澄清了一些

当我第一次开始学习 Java 时(来自 C 和 C++ 背景),这可能是让我绊倒的第一件事。希望我能说明一些问题。

与 C++ 不同,Java 中的对象数组存储对象。它们存储对象引用。

在 C++ 中,如果您声明类似于:

String myStrings[10];

您将获得 10 个 String 对象。在这一点上,做类似 println(myStrings[5].length); 的事情是完全合法的。 - 你会得到 '0' - String 的默认构造函数创建一个长度为 0 的空字符串。

在 Java 中,当您构造一个新数组时,您会得到一个可以容纳 10 个 String 引用的空容器。所以调用:

String[] myStrings = new String[10];
println(myStringsp[5].length);

会抛出一个空指针异常,因为您实际上还没有将 String 引用放入数组中。

如果您有 C++ 背景,请将 new String[10] 视为等同于 C++ 中的 new (String *)[10]。

因此,考虑到这一点,应该很清楚为什么 ArrayList 自动扩展对象数组的解决方案(事实上,ArrayList 是使用简单数组实现的,具有增长算法内置根据需要分配新的扩展数组并将内容从旧的复制到新的)。

在实践中,我们使用数组的情况其实比较少。如果您正在编写一个容器(类似于 ArrayList 或 BTree),那么它们很有用,或者如果您正在进行大量低级字节操作 - 但在大多数开发发生的级别,使用 Collections 类之一是迄今为止首选的技术。

关于java - Java 中是否有可扩展的对象引用列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/242079/

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