wake-up-neo.com

Wie kann ich einem Java-Array dynamisch Elemente hinzufügen?

In PHP können Sie den Arrays Elemente folgendermaßen dynamisch hinzufügen:

$x = new Array();
$x[] = 1;
$x[] = 2;

Danach wäre $x ein Array wie folgt: {1,2}.

Gibt es eine Möglichkeit, etwas Ähnliches in Java zu tun?

79
kamikaze_pilot

Schauen Sie sich Java.util.LinkedList oder Java.util.ArrayList an

List<Integer> x = new ArrayList<Integer>();
x.add(1);
x.add(2);
106
corsiKa

Arrays in Java haben eine feste Größe, so dass Sie nicht "etwas am Ende hinzufügen" können, wie Sie es in PHP tun könnten.

Ein bisschen ähnlich wie das Verhalten von PHP ist:

int[] addElement(int[] org, int added) {
    int[] result = Arrays.copyOf(org, org.length +1);
    result[org.length] = added;
    return result;
}

Dann kannst du schreiben:

x = new int[0];
x = addElement(x, 1);
x = addElement(x, 2);

System.out.println(Arrays.toString(x));

Aber dieses Schema ist für größere Arrays schrecklich ineffizient, da es jedes Mal eine Kopie des gesamten Arrays erstellt. (Und es ist tatsächlich nicht völlig gleichwertig mit PHP, da Ihre alten Arrays gleich bleiben).

Die Arrays PHP sind in der Tat die gleichen wie eine Java HashMap mit einem hinzugefügten "max key". Sie wissen also, welcher Schlüssel als Nächstes verwendet werden soll, und eine merkwürdige Iterationsreihenfolge (und eine merkwürdige Äquivalenzbeziehung zwischen Integer-Schlüsseln und einige Saiten). Verwenden Sie für einfache indizierte Sammlungen jedoch eine Liste in Java, wie die anderen vorgeschlagenen Antworter.

Wenn Sie List wegen des Overheads des Wraps jedes Int in eine Integer-Zahl vermeiden möchten, sollten Sie die Neuimplementierung von Auflistungen für primitive Typen verwenden, die Arrays intern verwenden, aber bei jeder Änderung keine Kopie nur dann vornehmen, wenn das interne Array voll ist (genau wie ArrayList). (Ein schnell gegoogeltes Beispiel ist diese IntList-Klasse .)

Guava enthält Methoden, die solche Wrapper erstellen in Ints.asList, Longs.asList usw.

63
Paŭlo Ebermann

Apache Commons verfügt über eine ArrayUtils - Implementierung, um ein Element am Ende des neuen Arrays hinzuzufügen:

/** Copies the given array and adds the given element at the end of the new array. */
public static <T> T[] add(T[] array, T element)
17
mist

Ich habe diese Frage sehr oft im Internet gesehen, und meiner Meinung nach haben viele Menschen mit gutem Ruf diese Fragen nicht richtig beantwortet. Deshalb möchte ich hier meine eigene Antwort ausdrücken.

Zuerst sollten wir berücksichtigen, dass es einen Unterschied zwischen array und arraylist gibt.

In der Frage werden Sie aufgefordert, ein Element zu einem Array und not ArrayList hinzuzufügen.


Die Antwort ist ganz einfach. Dies kann in 3 Schritten erfolgen.

  1. Konvertieren Sie das Array in eine Arrayliste
  2. Fügen Sie der arrayList ein Element hinzu
  3. Konvertieren Sie die neue ArrayList zurück in das Array

Hier ist das einfache Bild davon enter image description here

Und schließlich ist hier der Code:

Schritt 1:

public List<String> convertArrayToList(String[] array){
        List<String> stringList = new ArrayList<String>(Arrays.asList(array));
        return stringList;
    }

Schritt 2:

public  List<String> addToList(String element,List<String> list){

            list.add(element);
            return list;
    }

Schritt 3:

public String[] convertListToArray(List<String> list){
           String[] ins = (String[])list.toArray(new String[list.size()]);
           return ins;
    } 

Schritt 4

public String[] addNewItemToArray(String element,String [] array){
        List<String> list = convertArrayToList(array);
        list= addToList(element,list);
        return  convertListToArray(list);
}
12

Sie können eine ArrayList und dann die toArray()-Methode verwenden. Abhängig davon, was Sie tun, benötigen Sie möglicherweise gar kein Array. Prüfen Sie, ob Lists mehr ist, als Sie möchten.

Siehe: Java List Tutorial

11
Ian Dallas

Sie möchten wahrscheinlich eine ArrayList dafür verwenden - für eine Array-Struktur mit dynamischer Größe.

Mit Collection Frameworks in Java können Sie einem Array dynamisch Elemente hinzufügen. Collection Framework funktioniert nicht mit primitiven Datentypen.

Dieses Collection-Framework wird im Paket "Java.util. *" Verfügbar sein

Wenn Sie beispielsweise ArrayList verwenden, 

Erstellen Sie ein Objekt und fügen Sie dann die Anzahl der Elemente hinzu (jeder Typ wie String, Integer usw.).

ArrayList a = new ArrayList();
a.add("suman");
a.add(new Integer(3));
a.add("gurram");

Nun wurden Sie einem Array 3 Elemente hinzugefügt.

wenn Sie eines der hinzugefügten Elemente entfernen möchten

a.remove("suman");

erneut, wenn Sie ein Element hinzufügen möchten

a.add("Gurram");

Die Array-Größe nimmt also dynamisch zu/ab.

4
SSSM

Verwenden Sie eine ArrayList oder ein Jonglierfeld für Arrays, um die Arraygröße automatisch zu erhöhen.

1

Dies ist eine einfache Möglichkeit, ein Array in Java hinzuzufügen. Ich habe ein zweites Array zum Speichern meines ursprünglichen Arrays verwendet und dann ein weiteres Element hinzugefügt. Danach habe ich dieses Array wieder an das ursprüngliche Array übergeben.

    int [] test = {12,22,33};
    int [] test2= new int[test.length+1];
    int m=5;int mz=0;
    for ( int test3: test)        
    {          
    test2[mz]=test3; mz++;        
    } 
    test2[mz++]=m;
    test=test2;

    for ( int test3: test)

    {
      System.out.println(test3);
    }
0
Nenad Bojović

In Java ist die Größe des Arrays fest, aber Sie können einem Array mit fester Größe dynamisch Elemente hinzufügen, indem Sie dessen Index und for-Schleife verwenden. Ein Beispiel finden Sie unten.

package simplejava;

import Java.util.Arrays;

/**
 *
 * @author sashant
 */
public class SimpleJava {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here

        try{
            String[] transactions;
            transactions = new String[10];

            for(int i = 0; i < transactions.length; i++){
                transactions[i] = "transaction - "+Integer.toString(i);            
            }

            System.out.println(Arrays.toString(transactions));

        }catch(Exception exc){
            System.out.println(exc.getMessage());
            System.out.println(Arrays.toString(exc.getStackTrace()));
        }
    }

}
0

halten Sie fest, wo Sie sich im primitiven Array befinden

class recordStuff extends Thread
{
    double[] aListOfDoubles;
    int i = 0;

    void run()
    {
        double newData;
        newData = getNewData(); // gets data from somewhere

        aListofDoubles[i] = newData; // adds it to the primitive array of doubles
        i++ // increments the counter for the next pass

        System.out.println("mode: " + doStuff());
    }

    void doStuff()
    {
        // Calculate the mode of the double[] array

        for (int i = 0; i < aListOfDoubles.length; i++) 
        {
            int count = 0;
            for (int j = 0; j < aListOfDoubles.length; j++)
            {
                if (a[j] == a[i]) count++;
            }
            if (count > maxCount) 
            {
                maxCount = count;
                maxValue = aListOfDoubles[i];
            }
        }
        return maxValue;
    }
}
0
user1948983