2013-04-09 5 views
30

で[]配列は、今私が送る新しい値で動的にシリーズを更新したい既存のアレイかのように...</p> <p>をjavaの

int[] series = {4,2}; 

に要素を追加したり、追加したいint型に要素を追加iはとして1つの更新系列を送信する場合、私は再びint[] series = {4,2,3,4};

として4アップデート系列を送信する場合、私は再びint[] series = {4,2,3};

として3アップデート系列を送信しますso on

どのようにすればいいですか?

私は他のいくつかの機能では、5分ごとに整数を生成し、int[] series配列を更新するために送りたい...

+5

シリーズのアイテムの量が制限されていない場合、あなたは本当にあなたがそのようなhttp://docs.oracle.com/javase/6/ [ベクター](として、より適切なデータ構造を使用するように設計変更することを検討してくださいdocs/api/java/util/Vector.html)または[List](http://docs.oracle.com/javase/6/docs/api/java/util/List.html) – Oren

答えて

52

配列の長さはjavaでは不変です。つまり、作成したアレイのサイズを変更することはできません。 2要素で初期化した場合、その長さは2です。ただし、別のコレクションを使用することはできます。

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

とラッパー方法

public void addMember(Integer x) { 
    myList.add(x); 
}; 
+0

このリストのソート方法最高の価値を得るためには? – Shaonline

+0

@Shaonline昇順にCollections.sort(リスト)。降順で、Collections.sort(list、Collections.reverseOrder()); – compski

11

あなたは、コレクションを使用するように整数をより良い5分ごとに、生成された場合。必要に応じて、コード内で配列を取得することができます。エルス

、実行時にすべての値を処理するのに十分な大きさの配列を定義(ただし好ましくはないが。)

3

を配列のサイズを変更することはできません。より大きな配列が必要な場合は、新しい配列を作成する必要があります。

しかし、より良い解決策は、必要に応じて拡大できる(配列)リストを使用することです。 ArrayList.toArray(T [] a)メソッドは、アプリケーションで配列を使用する必要がある場合に配列を返します。

40

でEvgeniyに似て、この

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; 
} 
+0

これは非効率的に見えますか? @ジェイソンの答えは私には良く見える –

+0

@AlwinKesler私はちょうどここに興味があります、この答えは@ジェイソンのループよりも効率的ではありません? 'Array.copyOf()'は、基本的に配列をコピーするためにネイティブコードを使用する 'System.arraycopy()'を呼び出します。私は自分でそれをテストしていないが、私はそれが速くなると思います。 –

+0

これは 'addElement'に対するすべての要求に新しい配列を作成します。これは** log(N + 1)**の問題を考えるようになります。 Jason'sは最初の容量を使いインデックスに要素を追加しています。それは私の意見ですが、まだそれをテストしていません –

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; 
    } 
} 
1

を試してみてください。

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; 
} 
7

あなたはインデックスを追加する場合は、新しい配列を作成する必要があります。

これを試してください。他の人はあなたがコレクションを使用してオフに優れている提案と同様

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; 

    } 
+1

メインにループを追加して毎回新しいインデックスを生成することができます。 –

4

を作成します。あなたはしかし、いくつかの理由で、アレイに固執する必要がある場合は、その後の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方法は、新しい配列、コピー指定された配列を作成し、持って最後に新しい要素を、追加していることパフォーマンスへの影響

2
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; 

} 
+2

ここでは、25の倍数である10個の値の配列が必要です。このメソッドは、同様の要件で機能します。 –

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; 
+1

答えを詳しく説明してください。あなたが提供するソリューションについて少し詳しく説明してください。 – abarisone

+0

また、floa []に要素を追加するのにも非常に便利です –

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; 
} 

、多くは上記したように、あなたがCollectionを使用することができますまたはArrayListと入力して、.add()メソッドを使用することができます。

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]); 
     } 
    } 
} 
1

これは私の作品:

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

この方法で、それは、シンプルでありながら効率的です。

4

これを試すこともできます。

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; 
} 
関連する問題