Java - 在不知道大小的情况下从txt文件填充长数组?

时间:2017-10-12 18:29:53

标签: java arrays file

我正在尝试通过读入文件来填充数字数组(以及相同数字的临时数组)。该文件大约是32000行各种长号(每行一个)。我教授提供的代码如下:

public static void main(String[] args) throws FileNotFoundException {

    Scanner in = new Scanner(new File("longNumbers.txt"));
    Long [] numbers;
    Long [] temp;
    Long startTime, endTime;

    while(in.hasNext()) {
        //TODO:  populate numbers and temp arrays

    }

隐含的工作是在提供的while循环中完成的。我的问题是:数组的大小不是固定的吗?如果我们在填充数组之前没有扫描每一行,我们怎么知道数组的大小是多少?我很困惑在检查每一行时如何填充/实例化这两个数组。

3 个答案:

答案 0 :(得分:3)

您可以使用动态大小的数组 ArrayList<Long>基本上是一个数组的包装器,当你试图写出越界时,它会负责调整大小和复制它。本质上是顺序内存分配,并且如果不知道粗略估计并且进行了太多的重新调整大小,则会产生重新创建数组和复制元素的成本。

LinkedList此处

答案 1 :(得分:1)

我认为你的导师还谈到了如何调整阵列的大小。 这是一个简短的刷新:

int INIT_SIZE = 10
int[] array = new int[INIT_SIZE];
i = 0
while(condition)
{
    array[i++] = nextInt();
    if(i == array.length)    
         array = Arrays.copyOf(array, 0, array.length + (array.length / 2));
}

这是一个常见的解决方案,可以调整数组的大小,增加其长度的一半。

既然你知道如何调整int数组的大小,那么很容易调整Long数组的大小。

答案 2 :(得分:0)

您可以在循环中使用ArrayList尝试in.nextLong()并在之后创建一个大小为'ArrayList'的数组(如果您真的需要它):

ArrayList<Long> numbers = new ArrayList<Long>();
while (in.hasNext()) {
    numbers.add(in.nextLong());
}
long[] numberArray = numbers.toArray(new Long[numbers.size()]);
// put all the numbers from ArrayList to the array