如何在java中动态更改对象大小的数组

时间:2014-02-13 06:17:39

标签: java

我需要创建动态变化的对象数组。如何创建这个。请帮帮我。

PrefixMatcher[] pm = new PrefixMatcher[8];
Scanner infile = new Scanner(new File(url.toURI()));
while (infile.hasNextLine()) {
      int len = infline.length();
      //here i need to create reinitialize the same object using length of the file's first line      

}

4 个答案:

答案 0 :(得分:1)

Java中的数组具有固定大小,在声明时指定。要增加数组的大小,您必须创建一个更大的新数组,并将所有旧值复制到新数组中。

例如:

char[] copyFrom  = { 'a', 'b', 'c', 'd', 'e' };
char[] copyTo    = new char[7];

System.out.println(Arrays.toString(copyFrom));
System.arraycopy(copyFrom, 0, copyTo, 0, copyFrom.length);
System.out.println(Arrays.toString(copyTo));

另一个例子:

 String[] array = new String[5];
 ...
 array = expand(array, 10);

 private String[] expand(String[] array, int size) {
   String[] temp = new String[size];
   System.arraycopy(array, 0, temp, 0, array.length);
   for(int j = array.length; j < size; j++)
      temp[j] = "";
   return temp;
}

答案 1 :(得分:0)

ArrayList正是您所寻找的,List的实现,它在内部使用数组来存储数据

答案 2 :(得分:0)

尝试使用ArrayList。当数组大小未修复时,可以使用ArrayList。

ArrayList<PrefixMatcher> pm = new ArrayList<PrefixMatcher>();

您可以通过索引来访问特定位置的元素。

pm.get(123);

答案 3 :(得分:0)

你无法调整数组的大小,我认为现在很明显很明显,但是,如果你不能使用Collections APIList实现,你可以创建一个新的数组,大于第一个数组,并将其内容复制到它,然后替换引用。

String[] values = new String[10];
String[] newValues = new String[20];
System.arraycopy(values, 0, newValues, 0, values.length);
values = newValues;

你可以将它包装在方法中以使其更容易......

public String[] grow(String[] source, int newSize) {
    String[] newValues = new String[20];
    System.arraycopy(source, 0, newValues, 0, source.length);
    return newValues;
}

就个人而言......虽然......我会认真考虑使用像ArrayListLinkedList这样的东西...它只是更简单;)