如何在Java中创建动态数组?

时间:2014-06-10 04:12:23

标签: java arrays

我们的任务快速概述: 用户需要输入收到的成绩。我们不知道用户需要输入多少等级。如果用户输入“-1”,那就是当我们知道用户输入成绩时。

问题是如何使用计数器并在同一循环中为数组赋值?我宁愿不必要求用户输入两次所有值(一次获得数组大小,第二次将分数分配给索引位置)。

我们的教授给了我们一份讲义,告诉我们基本上猜测阵列的大小并希望最好。我拒绝相信这是唯一的解决方案。

任何帮助将不胜感激。谢谢。

4 个答案:

答案 0 :(得分:2)

你不能在java中制作动态数组。

为此,您必须使用ListArrayList

我们必须在应用程序运行之前或编码时提供数组的大小,而arrayList使我们能够在需要时添加数据,因此当我们添加数据时它的大小会自动增加。

示例:

import java.util.*;

public class ArrayListDemo {
   public static void main(String args[]) {
      // create an array list
      ArrayList al = new ArrayList();
      System.out.println("Initial size of al: " + al.size());

      // add elements to the array list
      al.add("C");
      al.add("A");
      al.add("E");
      al.add("B");
      al.add("D");
      al.add("F");
      al.add(1, "A2");
      System.out.println("Size of al after additions: " + al.size());

      // display the array list
      System.out.println("Contents of al: " + al);
      // Remove elements from the array list
      al.remove("F");
      al.remove(2);
      System.out.println("Size of al after deletions: " + al.size());
      System.out.println("Contents of al: " + al);
   }
}

此示例来自here.

更新:

将列表定义为:

List myList = new ArrayList(); 您只能调用属于List类的方法和引用成员。如果您将其定义为:

ArrayList myList = new ArrayList(); 除了从List继承的成员之外,您还可以调用特定于ArrayList的方法并使用特定于ArrayList的成员。

列表不是一个类,它是一个接口。它没有实现任何方法。因此,如果在List引用上调用方法,实际上在两种情况下都调用了ArrayList的方法。

答案 1 :(得分:1)

使用某种List是一个更好的选择,因为它基本上可以做你想要的(可以增长和缩小),事实上,ArrayList只是一个动态数组。

如果您使用System.arraycopy

无法使用List,则可以手动滚动自己

例如,这会增大或缩小数组以匹配您提供的大小......

public String[] updateArray(String[] src, int size) {

    String[] dest = new String[size];
    if (size > src.length) {

        System.arraycopy(src, 0, dest, 0, src.length);

    } else {

        System.arraycopy(src, 0, dest, 0, size);

    }

    return dest;

}

再次...... List更容易......

答案 2 :(得分:0)

构建动态数组涉及以下基本步骤:

- 创建一个固定容量的数组。

- 当数组的大小(添加的元素数)接近容量时,创建一个新数组(通常使容量加倍),并将所有旧元素复制到新数组。

链接列表对于构建阵列的任务(在O(1)时间内完成)最有效。但是,访问链接列表中的插入和删除元素效率不高(O(n)时间)。想象一下,必须遍历整个列表才能到达最后一个元素。构建动态数组效率较低,因为需要在数组增长时重新调整数组大小。插入和删除元素的效率较低,因为需要移动所有元素以腾出空间或填补空白。但是访问数组中的元素是有效的(O(1)时间),并且在排序方面有很大的优势。

Java ArrayList是动态数组的实现。你也可以实现自己的。

答案 3 :(得分:0)

如果您不能使用ArrayList或任何类型的动态列表,那么一个解决方案就是:

StringBuilder sb = new StringBuilder();
Scanner scanner = new Scanner(System.in);
int j;
while((j=scanner.nextInt()) !=-1){
    sb.append(j + " ");
}
String []numbers = sb.toString().split(" ");
int[] grades = new int[numbers.length];
for(int i=0;i<numbers.length;i++){
    grades[i] = Integer.parseInt(numbers[i]);
}

正如您所看到的,我将输入放在stringbuilder对象中,然后将其解析为字符串数组,并将该数组转换为整数数组。 我希望这会有所帮助。