"调整大小" Java中的一个Array,并将其发回

时间:2014-10-26 19:30:27

标签: java arrays

我需要多次动态调整数组大小,而不是猜测其中有多少个元素。我已为此完成了代码,但它似乎没有工作,任何人都可以帮我弄清楚什么是错的!基本上我需要在找到匹配时继续添加匹配数组(为此实现了另一种方法)。

目前它只是填充匹配数组,然后为它试图放入数组的下一个元素提供一个ArrayIndexOutOfBoundsException。

以下是2个功能。

由于

private static String[] subStrings(String[] tokens) {

    String[] matches;
    matches = new String[40]; //creates a new array of matches 

    for (int i = 0; i <=tokens.length; i++){

        for (int j = i+1; j <tokens.length;j++){

            if(Text.match(tokens[i],tokens[j])){

                matches[i]=(tokens[i]+" | "+tokens[j]); 
                System.out.println(matches[i]);

                if(matches[matches.length-1]!=null){
                    reSize(matches, matches.length+10);

                }
            }
        }

    }

public static String [] reSize(String [] matches,int s){

    if(s<0){
        return null;
    }

    String BiggerMatch[] = new String[s];

    for(int i=0; i< matches.length; ++i){

        BiggerMatch[i]=matches[i]; //saves the original array in a temporary  variable
    }

    matches = new String[s]; //adds s integer to the array size of matches

    for(int i=0; i<=matches.length - s ; i++){ //leaves s spaces null at the end of the array
        matches[i]= BiggerMatch[i];
    }

    matches = BiggerMatch;
    subStrings(matches); //sending the new array back to the subStrings method
    return BiggerMatch;//returns the new array
}

}

2 个答案:

答案 0 :(得分:0)

使用ArrayList。 ArrayLists是具有相同类型的后备数组的列表。

ArrayLists遵循特定的调整大小策略(另请参见此处:ArrayList: how does the size increase?)。因此,如果元素超出后备数组大小,将创建一个新数组,并将复制“旧”数组中的元素。

如果您确实需要将数组作为返回值,则只需使用List的toArray方法:

 ArrayList<String> matches = new ArrayList<String>();
 ....
 for(....) {
     matches.add(someString);
 }
 ....
 return matches.toArray(new String[matches.size()]);

答案 1 :(得分:0)

public String[] resize(String[] original, int extra) {
   // You are right you can't resize an array,
   // But we can make a new one with extra amount of indexes
   String[] newArray = new String[original.length + extra];
   // Then we need to copy the original memory over to the new
   // array. This leaves the end of the array all null.
   System.arrayCopy(original, 0, newArray, 0, original.length);
   // Then return it
   return newArray;
}

现在,在使用此功能时,您必须在调用代码

中执行以下操作
/// ....
if (matches[matches.length-1] != null) {
   matches = resize(matches, 10);
}

这是因为就像你说的那样你无法真正调整数组的大小。因此,您需要使用resize方法创建的数组替换此堆栈上下文中的数组。