在Java中,我们总是可以使用数组来存储对象引用.然后我们有一个ArrayList或HashTable,它可以自动扩展为存储对象.但有没有人知道一种自动扩展的对象引用数组的本地方式?
编辑:我的意思是我想知道Java API是否有一些类能够存储对象的引用(但不存储实际对象,如XXXList或HashTable)和自动扩展的能力.
根据它们的定义,Java数组是固定大小的.如果需要自动增长,则使用XXXList类.
编辑 - 问题已经澄清了一点
当我第一次开始学习Java(来自C和C++背景)时,这可能是让我绊倒的第一件事.希望我能解释一下.
与C++不同,Java中的Object数组不存储对象.它们存储对象引用.
在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++背景,请将新的String [10]视为等同于C++中的new(String*)[10].
因此,考虑到这一点,应该相当清楚为什么ArrayList 是自动扩展对象数组的解决方案(事实上,ArrayList是使用简单数组实现的,内置增长算法,根据需要分配新的扩展数组,将内容从旧复制到新的).
实际上,我们使用数组的情况实际上相对较少.如果您正在编写容器(类似于ArrayList或BTree),那么它们很有用,或者如果您正在进行大量低级字节操作 - 但是在大多数开发发生的级别上,使用其中一个Collections类到目前为止是首选的技术.