繁体   English   中英

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

[英]Java - Populate long array from txt file without knowing size?

我正在尝试通过读取文件来填充长数字的数字数组(以及相同数字的临时数组)。 该文件大约有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循环内完成工作。 我的问题是:数组的大小不固定吗? 如果我们在填充数组之前没有在每一行中进行扫描,那么我们如何知道数组的大小? 我对检查每行时如何填充/实例化这两个数组感到非常困惑。

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

LinkedList在这里

我想您的老师也谈到了如何调整数组的大小。 这是一小段刷新:

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数组的大小。

您可以使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM