57

想要向现有数组添加或追加元素

int[] series = {4,2};

现在我想用我发送的新值动态更新系列..

就像我发送 3 个更新系列一样int[] series = {4,2,3};

如果我再次发送 4 个更新系列int[] series = {4,2,3,4};

int[] series = {4,2,3,4,1};如果我再次发送1 个更新系列

怎么做????

我在其他函数中每 5 分钟生成一个整数,并希望发送以更新int[] series数组..

4

14 回答 14

89

java中数组的长度是不可变的。这意味着一旦创建了数组,就无法更改数组的大小。如果你用 2 个元素初始化它,它的长度是 2。但是你可以使用不同的集合。

List<Integer> myList = new ArrayList<Integer>();
myList.add(5);
myList.add(7);

并使用包装方法

public void addMember(Integer x) {
    myList.add(x);
};
于 2013-04-09T10:41:42.333 回答
56

试试这个

public static void main(String[] args) {
    int[] series = {4,2};
    series = addElement(series, 3);
    series = addElement(series, 1);
}

static int[] addElement(int[] a, int e) {
    a  = Arrays.copyOf(a, a.length + 1);
    a[a.length - 1] = e;
    return a;
}
于 2013-04-09T10:44:56.753 回答
14

如果您每 5 分钟生成一个整数,最好使用集合。如果您的代码需要,您始终可以从中获取数组。

否则定义足够大的数组以在运行时处理所有值(虽然不是首选。)

于 2013-04-09T10:39:43.190 回答
9

如果要添加索引,则需要创建一个新数组。

试试这个:

public static void main(String[] args) {
    int[] series = new int[0];
    int x = 5;


    series = addInt(series, x);

    //print out the array with commas as delimiters
    System.out.print("New series: ");
    for (int i = 0; i < series.length; i++){
        if (i == series.length - 1){
            System.out.println(series[i]);
        }
        else{
            System.out.print(series[i] + ", ");
        }
    }
}

// 这里,创建一个方法

public static int[] addInt(int [] series, int newInt){
    //create a new array with extra index
    int[] newSeries = new int[series.length + 1];

    //copy the integers from series to newSeries    
    for (int i = 0; i < series.length; i++){
        newSeries[i] = series[i];
    }
//add the new integer to the last index     
    newSeries[newSeries.length - 1] = newInt;



    return newSeries;

     }
于 2013-12-08T04:07:32.987 回答
8

像其他人建议你最好使用收集。但是,如果您出于某种原因必须坚持使用数组,那么 Apache Commons ArrayUtils可能会有所帮助:

int[] series = {4,2};
series = ArrayUtils.add(series, 3); // series is now {4,2,3}
series = ArrayUtils.add(series, 4); // series is now {4,2,3,4};

请注意,该add方法创建一个新数组,复制给定数组并在末尾附加新元素,这可能会影响性能。

于 2014-09-05T10:06:18.867 回答
5

你也可以试试这个。

public static int[] addOneIntToArray(int[] initialArray , int newValue) {

    int[] newArray = new int[initialArray.length + 1];
    for (int index = 0; index < initialArray.length; index++) {
        newArray[index] = initialArray[index];
    }

    newArray[newArray.length - 1] = newValue;
    return newArray;
}
于 2016-04-05T22:48:37.770 回答
4

数组的大小无法更改。如果你想要一个更大的数组,你必须创建一个新数组。

但是,更好的解决方案是使用可以根据需要增长的 (Array)List。如果您需要在应用程序中使用数组,则方法 ArrayList.toArray(T[] a) 返回一个数组。

于 2013-04-09T10:40:29.210 回答
3
public int[] return_Array() {

int[] a =new int[10];   
int b = 25;
for(int i=0; i<10; i++) {               
    a[i] = b * i;
    }
return a;

}
于 2015-05-11T07:26:41.930 回答
2
import java.util.Arrays;

public class NumberArray {     

    public static void main(String []args){
        int[] series = {4,2};
        int[] newSeries = putNumberInSeries(1,series);
        System.out.println(series==newSeries);//return false. you won't get the same int[] object. But functionality achieved.
    }
    private static int[] putNumberInSeries(int i, int[] series) {
        int[] localSeries = Arrays.copyOf(series, series.length+1);
        localSeries[series.length] = i;
        System.out.println(localSeries);
        return localSeries;
    }
}
于 2013-04-09T10:59:28.210 回答
2

...只能在 JDK 1.5 或更高版本中使用。如果您使用的是 JDK 4 或更低版本,请使用以下代码:'

public static int[] addElement(int[] original, int newelement) {
    int[] nEw = new int[original.length + 1];
    System.arraycopy(original, 0, nEw, 0, original.length);
    nEw[original.length] = newelement;
}

否则(JDK 5 或更高版本):

public static int[] addElement(int[] original, int... elements) { // This can add multiple elements at once; addElement(int[], int) will still work though.
    int[] nEw = new int[original.length + elements.length];
    System.arraycopy(original, 0, nEw, 0, original.length);
    System.arraycopy(elements, 0, nEw, original.length, elements.length);
    return nEw;
}

当然,正如上面许多人提到的,您可以使用 aCollection或 an ArrayList,这允许您使用该.add()方法。

于 2015-05-22T00:21:34.853 回答
2
class AddElement {
     public static void main(String s[]) {
        int arr[] ={2,3};
        int add[] = new int[arr.length+1];
        for(int i=0;i<add.length;i++){
        if(i==add.length-1){
            add[i]=4;
        }else{
            add[i]=arr[i];
        }
        System.out.println(add[i]);
        }
    } 
}
于 2015-05-22T10:11:11.613 回答
2

这对我有用:

int[] list = new int[maximum];
for (int i = 0; i < maximum; i++{
    list[i] = put_input_here;
}

这样,它简单而高效。

于 2016-03-19T20:51:44.363 回答
1

类似于 Evgeniy:

int[] series = {4,2};

  add_element(3);
  add_element(4);
  add_element(1);


public void add_element(int element){
  series = Arrays.copyOf(series, series.length +1);
  series[series.length - 1] = element;
}
于 2013-12-03T03:22:00.417 回答
1

int[] oldArray = {1,2,3,4,5};

    //new value
    int newValue = 10;

    //define the new array
    int[] newArray = new int[oldArray.length + 1];

    //copy values into new array
    for(int i=0;i < oldArray.length;i++)
        newArray[i] = oldArray[i];
    //another solution is to use 
    //System.arraycopy(oldArray, 0, newArray, 0, oldArray.length);

    //add new value to the new array
    newArray[newArray.length-1] = newValue;

    //copy the address to the old reference 
    //the old array values will be deleted by the Garbage Collector
    oldArray = newArray;
于 2015-05-11T07:43:38.510 回答