我有一个类- xClass,我想把它加载到一个xClass数组中,这样我就可以声明:
xClass mysclass[] = new xClass[10];
myclass[0] = new xClass();
myclass[9] = new xClass();
然而,我不知道我是否需要10。我可能需要8或12或任何其他数字。我要等到运行时才能知道。我可以动态更改数组中元素的数量吗?如果是这样的话,是怎么做的?
发布于 2009-10-30 08:05:08
不,数组一旦创建,就不能改变其大小。您要么必须分配比您认为需要的更大的空间,要么接受必须重新分配空间的开销。当它发生时,你将不得不分配一个新的,并将数据从旧的复制到新的:
int[] oldItems = new int[10];
for (int i = 0; i < 10; i++) {
oldItems[i] = i + 10;
}
int[] newItems = new int[20];
System.arraycopy(oldItems, 0, newItems, 0, 10);
oldItems = newItems;
如果您发现自己处于这种情况,我强烈建议您改用Java Collections。特别是,ArrayList
本质上包装了一个数组,并负责根据需要增加数组的逻辑:
List<XClass> myclass = new ArrayList<XClass>();
myclass.add(new XClass());
myclass.add(new XClass());
通常,出于以下几个原因,ArrayList
是一个比数组更可取的解决方案。首先,数组是可变的。如果你有一个这样的类:
class Myclass {
private int[] items;
public int[] getItems() {
return items;
}
}
你已经制造了一个问题,因为调用者可以改变你的私有数据成员,这导致了各种防御性的复制。将此版本与列表版本进行比较:
class Myclass {
private List<Integer> items;
public List<Integer> getItems() {
return Collections.unmodifiableList(items);
}
}
发布于 2009-10-30 08:45:37
在java数组中,长度是固定的。
如果需要,您可以使用列表来保存这些值并调用toArray
方法,请参阅以下示例:
import java.util.List;
import java.util.ArrayList;
import java.util.Random;
public class A {
public static void main( String [] args ) {
// dynamically hold the instances
List<xClass> list = new ArrayList<xClass>();
// fill it with a random number between 0 and 100
int elements = new Random().nextInt(100);
for( int i = 0 ; i < elements ; i++ ) {
list.add( new xClass() );
}
// convert it to array
xClass [] array = list.toArray( new xClass[ list.size() ] );
System.out.println( "size of array = " + array.length );
}
}
class xClass {}
发布于 2009-10-30 08:04:59
您可以在创建元素时将元素的数量设置为所需的任何内容:
xClass[] mysclass = new xClass[n];
然后,您可以在循环中初始化元素。我猜这就是你所需要的。
如果在创建数组后需要向数组中添加或删除元素,则必须使用ArrayList
。
https://stackoverflow.com/questions/1647260
复制相似问题