2013-04-09 16 views
30

Wollen Sie Elemente zu vorhandenen Array hinzufügen oder anhängenein Element hinzufügen int [] Array in Java

int[] series = {4,2}; 

jetzt habe ich die Serie dynamisch mit neuen Werten aktualisieren möchte ich senden ..

wie wenn i senden 3 Update Reihe als int[] series = {4,2,3};

wieder, wenn i 4 Update senden, wie Serie int[] series = {4,2,3,4};

wieder, wenn i 1 Update Reihe alssendenso weiter

Wie es geht ????

I erzeugen eine ganze Zahl alle 5 Minuten in einer anderen Funktion und will die int[] series Array zu aktualisieren senden ..

+5

, wenn die Menge der Elemente in Serie nicht begrenzt ist, sollten Sie wirklich in Betracht ziehen Sie eine geeignete Datenstruktur an sich verändernde Design verwenden wie [Vector] (http://docs.oracle.com/javase/6/ docs/api/java/util/Vector.html) oder [Liste] (http://docs.oracle.com/javase/6/docs/api/java/util/List.html) – Oren

Antwort

52

Die Länge eines Arrays ist in Java unveränderlich. Dies bedeutet, dass Sie die Größe eines Arrays nicht mehr ändern können, nachdem Sie es erstellt haben. Wenn Sie es mit 2 Elementen initialisiert haben, ist seine Länge 2. Sie können jedoch eine andere Sammlung verwenden.

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

Und mit einem Wrappermethode

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

Wie kann diese Liste sortiert werden? um den höchsten Wert zu bekommen? – Shaonline

+0

@Shaonline In aufsteigender Reihenfolge, Collections.sort (Liste). In absteigender Reihenfolge, Collections.sort (liste, Collections.reverseOrder()); – compski

11

Wenn Sie eine ganze Zahl alle 5 Minuten generieren, besser Sammlung zu verwenden. Sie können immer Array davon erhalten, wenn dies in Ihrem Code erforderlich ist.

Else definieren das Array groß genug, um alle Ihre Werte zur Laufzeit (nicht jedoch bevorzugt.) Zu handhaben

3

Die Größe eines Arrays nicht geändert werden kann. Wenn Sie ein größeres Array möchten, müssen Sie ein neues Array erstellen.

Eine bessere Lösung wäre jedoch die Verwendung einer (Array-) Liste, die nach Bedarf wachsen kann. Die Methode ArrayList.toArray (T [] a) gibt ein Array zurück, wenn Sie in Ihrer Anwendung ein Array verwenden müssen.

40

versuchen dieses

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

das sieht ineffizient aus, oder? @Jason Antwort scheint mir besser –

+0

@AlwinKesler Ich bin nur neugierig hier, wie ist diese Antwort weniger effizient als @ Jasons Schleife? 'Array.copyOf()' ruft im Grunde 'System.arraycopy()' auf, das nativen Code verwendet, um ein Array zu kopieren. Ich habe es nicht selbst getestet, aber ich würde mir vorstellen, es wäre schneller. –

+0

Es erstellt ein neues Array in jeder Anfrage an 'addElement'. Das lässt mich an ein ** log (N + 1) ** - Problem denken. Jason verwendet eine anfängliche Kapazität und fügt den Indizes Elemente hinzu, von denen ich denke, dass es besser ist. Das ist meiner Meinung nach immer noch nicht testen –

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

ähnlich wie 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; 
} 
7

Sie Wenn Sie einen Index hinzufügen möchten, müssen Sie ein neues Array erstellen.

Try this:

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] + ", "); 
     } 
    } 
} 

// hier

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

Sie können im Hauptmenu eine Schleife einfügen, um jedes Mal einen neuen Index erstellen zu lassen. –

4

eine Methode erstellen Wie andere vorgeschlagen, dass Sie besser dran sind mit Sammlung. Wenn Sie jedoch aus irgendeinem Grund Array-Stick muss dann ArrayUtils Apache Commons kann helfen:

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

Beachten Sie, dass die add Methode ein neues Array erstellt, kopiert die angegebenen Array und fügt das neue Element am Ende, die haben Auswirkung auf die Leistung.

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

Hier möchte ich Array von 10 Werten, die Vielfache von 25 sind. Diese Methode funktioniert für ähnliche Anforderungen. –

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

Könnten Sie bitte mehr Ihre Antwort ausarbeiten, indem Sie ein wenig mehr Beschreibung der von Ihnen bereitgestellten Lösung hinzufügen? – abarisone

+0

Es ist auch sehr nützlich, die Elemente in floa [] auch hinzuzufügen –

2

Die ... kann nur in JDK 1.5 oder höher verwendet werden. Wenn Sie JDK 4 oder niedriger verwenden, verwenden Sie diesen Code ein:‘

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

sonst (JDK 5 oder höher):

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

Natürlich, wie viele von ihnen haben bereits erwähnt, könnten Sie eine Collection verwenden oder ein ArrayList, mit dem Sie die .add() Methode verwenden können.

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

Dies funktioniert für mich:

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

Auf diese Weise ist es einfach, aber effizient.

4

Sie könnten dies auch versuchen.

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