如何使数组大小可变?

时间:2018-09-03 00:28:10

标签: java arrays binary-search

所以我的程序可以运行了。我只希望它使用文本文件的二进制搜索并确定可以在其中找到的最高索引号。如果找不到它,则找到下一个最大索引号并将其设为负数。我的问题是现在获取的数组大小为11。这是因为这是我使用的文本文件中有多少个整数。如果我不知道整数的数量怎么办?我了解人们建议列出一个清单,但是那会不接受重复吗? 为什么这部分代码:

while(scanner.hasNextInt()){
        arr[i++] = scanner.nextInt();}
    scanner.close();

不根据需要更改我的数组大小吗?

import java.util.Scanner;
import java.io.File;
import java.io.IOException;

public class BinarySearch {   
 public static int binarysearch(int[] arr, int key)
{
int lo = 0, hi = arr.length - 1;
{
    while (lo < hi) 
    {
        int mid = (lo + hi) / 2;
        if (arr[mid] <= key)
            lo = mid + 1;
        if (arr[mid] > key)
            hi = mid;
    }
    if (arr[lo] == key) {
        return lo;
    }
    else if ((arr[lo] != key) && (arr[lo-1] == key)){
        return lo - 1;
    }
    else{
    return (binarysearch( arr,(key-1))* - 1); 
} 
    }
} 



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

    int k = Integer.parseInt(args[1]);
    Scanner scanner = new Scanner(new File(args[0]));

    int[] arr = new int[11];
    int i = 0;
    while(scanner.hasNextInt()){
        arr[i++] = scanner.nextInt();}
    scanner.close();

    System.out.println(binarysearch(arr, k));

}}
}

1 个答案:

答案 0 :(得分:1)

List

ListCollection,通常代替数组。具体来说,ArrayList的{​​{1}}实现由内部数组支持,并根据需要自动处理内部数组的大小调整或重建。

List

要找到最高级别,请使用Collections实用工具类进行排序。

List< Integer > integers = new ArrayList<>() ;
integers.add( 7 ) ;
integers.add( 11 ) ;

对于逆序:

Collections.sort( integers ) ;

如果您大致知道列表可能最终需要的大小,则可以在实例化Collections.reverse( integers ) ; 时指定初始容量。设置初始容量可以帮助提高ArrayList的运行效率,但是您不必为此担心。

ArrayList

请参见Oracle Tutorial

如果要消除重复项,请改用int initialCapacity = ( myNumberOfThis * myNumberOfThat ) + 1 ; // Whatever clues you have about possible size. List< Integer > integers = new ArrayList<>( initialCapacity ) ; 。搜索堆栈溢出,因为已经有很多次了。