Pertanyaan Bagaimana saya bisa secara dinamis menambahkan item ke array Java?


Di PHP, Anda dapat secara dinamis menambahkan elemen ke array dengan cara berikut:

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

Sesudah ini, $x akan menjadi array seperti ini: {1,2}.

Apakah ada cara untuk melakukan hal serupa di Jawa?


75
2018-02-21 02:28


asal


Jawaban:


Lihatlah java.util.LinkedList atau java.util.ArrayList

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

100
2018-02-21 02:32



Array di Java memiliki ukuran yang tetap, jadi Anda tidak bisa "menambahkan sesuatu di akhir" seperti yang Anda bisa lakukan di PHP.

Sedikit mirip dengan perilaku PHP adalah ini:

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

Kemudian Anda dapat menulis:

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

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

Tetapi skema ini sangat tidak efisien untuk array yang lebih besar, karena membuat salinan dari seluruh array setiap saat. (Dan itu sebenarnya tidak sepenuhnya setara dengan PHP, karena array lama Anda tetap sama).

Array PHP sebenarnya cukup sama dengan Java HashMap dengan tambahan "kunci maks", jadi ia akan tahu kunci mana yang akan digunakan selanjutnya, dan urutan iterasi yang aneh (dan hubungan ekuivalensi yang aneh antara kunci Integer dan beberapa String). Tetapi untuk koleksi berindeks sederhana, lebih baik gunakan Daftar di Java, seperti penjawab lain yang diusulkan.

Jika Anda ingin menghindari penggunaan List karena overhead membungkus setiap int dalam Integer, pertimbangkan untuk menggunakan reimplementations dari koleksi untuk tipe primitif, yang menggunakan array secara internal, tetapi tidak akan melakukan copy pada setiap perubahan, hanya ketika array internal penuh (seperti ArrayList). (Satu contoh dengan cepat googled adalah kelas IntList ini.)

Jambu biji mengandung metode pembuatan pembungkus tersebut di Ints.asList, Longs.asList, dll.


63
2018-02-21 15:13



Apache Commons memiliki ArrayUtils implementasi untuk menambahkan elemen di akhir larik baru:

/** 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
2017-08-25 12:59



Anda bisa menggunakan ArrayList lalu gunakan toArray() metode. Tetapi tergantung pada apa yang Anda lakukan, Anda mungkin bahkan tidak memerlukan array sama sekali. Lihatlah untuk melihat apakah Lists lebih banyak yang Anda inginkan.

Lihat: Tutorial Daftar Java


11
2018-02-21 02:34



Saya telah sering melihat pertanyaan ini di web dan menurut pendapat saya, banyak orang dengan reputasi tinggi tidak menjawab pertanyaan-pertanyaan ini dengan benar. Jadi saya ingin menyampaikan jawaban saya sendiri di sini.

Pertama kita harus mempertimbangkan ada perbedaan antara array dan arraylist.

Pertanyaannya meminta menambahkan elemen ke sebuah array, dan bukan ArrayList


Jawabannya cukup sederhana. Itu bisa dilakukan dalam 3 langkah.

  1. Konversi array ke arraylist
  2. Tambahkan elemen ke arrayList
  3. Konversi kembali arrayList baru ke array

Inilah gambaran sederhana tentangnya enter image description here

Dan akhirnya di sini adalah kode:

Langkah 1:

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

Langkah 2:

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

            list.add(element);
            return list;
    }

Langkah 3:

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

Langkah 4

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

9
2018-01-30 14:16



Anda mungkin ingin menggunakan ArrayList untuk ini - untuk struktur seperti array dinamis.


5
2018-02-21 02:32



Anda dapat secara dinamis menambahkan elemen ke array menggunakan Collection Frameworks di JAVA. Kerangka pengumpulan tidak berfungsi pada tipe data primitif.

Kerangka Koleksi ini akan tersedia dalam paket "java.util. *"

Misalnya jika Anda menggunakan ArrayList,

Buat objek untuk itu dan kemudian tambahkan jumlah elemen (jenis apa pun seperti String, Integer ... dll)

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

Sekarang Anda telah menambahkan 3 elemen ke array.

jika Anda ingin menghapus elemen apa pun yang ditambahkan

a.remove("suman");

lagi jika Anda ingin menambahkan elemen apa pun

a.add("Gurram");

Jadi ukuran array meningkat / menurun secara dinamis ..


4
2017-08-25 13:18



Gunakan ArrayList atau juggle ke array untuk menambah ukuran larik secara otomatis.


1
2018-02-21 03:07



simpan hitungan di mana Anda berada dalam larik primitif

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
2018-01-04 15:18



Ini adalah cara sederhana untuk menambahkan ke array di java. Saya menggunakan array kedua untuk menyimpan array asli saya, dan kemudian menambahkan satu elemen lagi padanya. Setelah itu saya lewati array itu kembali ke yang asli.

    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
2017-11-05 07:35



Dalam ukuran Java array tetap, tetapi Anda dapat menambahkan elemen secara dinamis ke array berukuran tetap menggunakan indeks dan untuk loop. Silakan temukan contoh di bawah ini.

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
2017-09-30 09:48