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