Cara menambahkan elemen baru ke array?

Saya punya kode berikut:

String[] where;
where.append(ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1");
where.append(ContactsContract.Contacts.IN_VISIBLE_GROUP + "=1");

Mereka menambahkan dua yang tidak menyusun. Bagaimana itu bekerja dengan benar?

Larutan

Ukuran dari sebuah array dapat't dapat diubah. Jika anda ingin yang lebih besar array anda harus instantiate yang baru.

Solusi yang lebih baik akan menggunakan ArrayList yang dapat tumbuh seperti yang anda butuhkan. Metode ArrayList.toArray( T[] a ) memberi anda kembali anda menginap jika anda membutuhkannya dalam bentuk ini.

List where = new ArrayList();
where.add( ContactsContract.Contacts.HAS_PHONE_NUMBER+"=1" );
where.add( ContactsContract.Contacts.IN_VISIBLE_GROUP+"=1" );

Jika anda perlu mengkonversi ke array sederhana...

String[] simpleArray = new String[ where.size() ];
where.toArray( simpleArray );

Tapi sebagian besar hal-hal yang anda lakukan dengan sebuah array yang dapat anda lakukan dengan ArrayList, terlalu:

// iterate over the array
for( String oneItem : where ) {
    ...
}

// get specific items
where.get( 1 );
Komentar (3)

Gunakan klik disini<String>, seperti ArrayList<String>. It's secara dinamis growable, tidak seperti array (lihat: Effective Jawa 2nd Edition, Item 25: Sukai daftar untuk arrays).

import java.util.*;
//....

List list = new ArrayList();
list.add("1");
list.add("2");
list.add("3");
System.out.println(list); // prints "[1, 2, 3]"

Jika anda bersikeras menggunakan array, anda dapat menggunakan jawa.util.Array.copyOf untuk mengalokasikan lebih besar array untuk menampung elemen tambahan. Ini adalah benar-benar tidak solusi terbaik, meskipun.

static  T[] append(T[] arr, T element) {
    final int N = arr.length;
    arr = Arrays.copyOf(arr, N + 1);
    arr[N] = element;
    return arr;
}

String[] arr = { "1", "2", "3" };
System.out.println(Arrays.toString(arr)); // prints "[1, 2, 3]"
arr = append(arr, "4");
System.out.println(Arrays.toString(arr)); // prints "[1, 2, 3, 4]"

Ini adalah O(N) per tambahkan. ArrayList, di sisi lain, memiliki O(1) biaya perolehan diamortisasi per operasi.

Lihat juga

Komentar (1)

Apache Commons Lang telah

T[] t = ArrayUtils.add( initialArray, newitem );

ia mengembalikan sebuah array baru, tapi jika anda're-benar bekerja dengan array untuk beberapa alasan, hal ini dapat menjadi cara yang ideal untuk melakukan hal ini.

Komentar (0)

Ada pilihan lain yang saya belum't dilihat di sini dan yang doesn't melibatkan "kompleks" Benda atau Koleksi.

String[] array1 = new String[]{"one", "two"};
String[] array2 = new String[]{"three"};
String[] array = new String[array1.length + array2.length];
System.arraycopy(array1, 0, array, 0, array1.length);
System.arraycopy(array2, 0, array, array1.length, array2.length);
Komentar (0)

Tidak ada metode append() pada array. Bukan seperti yang sudah disarankan Daftar objek dapat melayani kebutuhan untuk secara dinamis memasukkan unsur-unsur misalnya.

List where = new ArrayList();
where.add(ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1");
where.add(ContactsContract.Contacts.IN_VISIBLE_GROUP + "=1");

Atau jika anda benar-benar tertarik untuk menggunakan array:

String[] where = new String[]{
    ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1",
    ContactsContract.Contacts.IN_VISIBLE_GROUP + "=1"
};

tapi kemudian ini adalah ukuran yang tetap dan tidak ada elemen yang dapat ditambahkan.

Komentar (1)

Sebagai tangens mengatakan, ukuran dari array adalah tetap. Tapi anda harus menurunkannya pertama, yang lain itu hanya akan null referensi.

String[] where = new String[10];

Array ini hanya dapat berisi 10 elemen. Jadi, anda dapat menambahkan nilai hanya 10 kali. Dalam kode anda anda're mengakses null referensi. Yang's mengapa hal itu tidak bekerja. Dalam rangka untuk memiliki tumbuh secara dinamis pengumpulan, penggunaan ArrayList.

Komentar (0)
String[] source = new String[] { "a", "b", "c", "d" };
String[] destination = new String[source.length + 2];
destination[0] = "/bin/sh";
destination[1] = "-c";
System.arraycopy(source, 0, destination, 2, source.length);

for (String parts : destination) {
  System.out.println(parts);
}
Komentar (0)

Anda perlu menggunakan Daftar Koleksi. Anda tidak bisa re-dimensi array.

Komentar (0)

Ada banyak cara untuk menambahkan elemen ke array. Anda dapat menggunakan temp Daftar untuk mengelola elemen dan kemudian mengubahnya kembali ke Array atau anda bisa menggunakan jawa.util.Array.copyOf dan menggabungkan dengan obat generik untuk hasil yang lebih baik.

Contoh ini akan menunjukkan kepada anda bagaimana:

public static  T[] append2Array(T[] elements, T element)
{
    T[] newArray = Arrays.copyOf(elements, elements.length + 1);
    newArray[elements.length] = element;

    return newArray;
}

Untuk menggunakan metode ini, anda hanya perlu untuk menyebutnya seperti ini:

String[] numbers = new String[]{"one", "two", "three"};
System.out.println(Arrays.toString(numbers));
numbers = append2Array(numbers, "four");
System.out.println(Arrays.toString(numbers));

Jika anda ingin menggabungkan dua array anda dapat memodifikasi metode sebelumnya seperti ini:

public static  T[] append2Array(T[] elements, T[] newElements)
{
    T[] newArray = Arrays.copyOf(elements, elements.length + newElements.length);
    System.arraycopy(newElements, 0, newArray, elements.length, newElements.length);

    return newArray;
}

Sekarang anda dapat memanggil metode seperti ini:

String[] numbers = new String[]{"one", "two", "three"};
String[] moreNumbers = new String[]{"four", "five", "six"};
System.out.println(Arrays.toString(numbers));
numbers = append2Array(numbers, moreNumbers);
System.out.println(Arrays.toString(numbers));

Seperti yang saya sebutkan, anda juga dapat menggunakan Daftar benda-benda. Namun, hal itu akan memerlukan sedikit hack untuk cor aman seperti ini:

public static  T[] append2Array(Class clazz, List elements, T element)
{
    elements.add(element);
    return clazz.cast(elements.toArray());
}

Sekarang anda dapat memanggil metode seperti ini:

String[] numbers = new String[]{"one", "two", "three"};
System.out.println(Arrays.toString(numbers));
numbers = append2Array(String[].class, Arrays.asList(numbers), "four");
System.out.println(Arrays.toString(numbers));
Komentar (1)

Jika anda ingin menyimpan data dalam array sederhana seperti ini

String[] where = new String[10];

dan anda ingin menambahkan beberapa elemen untuk itu seperti angka-angka yang perlu kita StringBuilder yang jauh lebih efisien daripada menggabungkan string.

StringBuilder phoneNumber = new StringBuilder();
phoneNumber.append("1");
phoneNumber.append("2");
where[0] = phoneNumber.toString();

Ini adalah metode yang jauh lebih baik untuk membangun string anda dan menyimpannya ke 'dan' array.

Komentar (0)

Menambahkan item baru ke String array.

String[] myArray = new String[] {"x", "y"};

// Convert array to list
List listFromArray = Arrays.asList(myArray);

// Create new list, because, List to Array always returns a fixed-size list backed by the specified array.
List tempList = new ArrayList(listFromArray);
tempList.add("z");

//Convert list back to array
String[] tempArray = new String[tempList.size()];
myArray = tempList.toArray(tempArray);
Komentar (1)

I've dibuat kode ini! Ia bekerja seperti pesona!

public String[] AddToStringArray(String[] oldArray, String newString)
{
    String[] newArray = Arrays.copyOf(oldArray, oldArray.length+1);
    newArray[oldArray.length] = newString;
    return newArray;
}

Saya harap anda menyukainya!!

Komentar (0)

I'm tidak yang berpengalaman di Jawa tapi saya selalu mengatakan bahwa array adalah struktur statis yang memiliki ukuran yang telah ditetapkan. Anda harus menggunakan ArrayList atau Vektor atau struktur dinamis.

Komentar (0)

Anda hanya dapat melakukan ini:

System.arraycopy(initialArray, 0, newArray, 0, initialArray.length);
Komentar (0)

anda dapat membuat arraylist, dan menggunakan Koleksi.addAll() untuk mengkonversi string array ke dalam arraylist

Komentar (0)

Jika seseorang benar-benar ingin mengubah ukuran array anda bisa melakukan sesuatu seperti ini:

String[] arr = {"a", "b", "c"};
System.out.println(Arrays.toString(arr)); 
// Output is: [a, b, c]

arr = Arrays.copyOf(arr, 10); // new size will be 10 elements
arr[3] = "d";
arr[4] = "e";
arr[5] = "f";

System.out.println(Arrays.toString(arr));
// Output is: [a, b, c, d, e, f, null, null, null, null]
Komentar (0)

Ukuran array tidak dapat diubah. Jika anda harus menggunakan sebuah array, anda dapat menggunakan: Sistem.arraycopy(src, srcpos, dest, destpos, panjang);

Komentar (0)