(utas lama, tetapi hanya 2 sen karena tidak ada yang menyebutkan Guava atau lib lainnya dan beberapa detail lainnya)
Jika Anda Bisa, Gunakan Jambu Biji
Ada baiknya menunjukkan cara Guava, yang sangat menyederhanakan shenanigans ini:
Pemakaian
Untuk Daftar yang Tidak Berubah
Gunakan ImmutableList
kelas dan yang of()
dan copyOf()
pabrik metode (unsur yang tidak dapat null) :
List<String> il = ImmutableList.of("string", "elements"); // from varargs
List<String> il = ImmutableList.copyOf(aStringArray); // from array
Untuk Daftar Mutable
Gunakan Lists
kelas dan newArrayList()
metode pabriknya:
List<String> l1 = Lists.newArrayList(anotherListOrCollection); // from collection
List<String> l2 = Lists.newArrayList(aStringArray); // from array
List<String> l3 = Lists.newArrayList("or", "string", "elements"); // from varargs
Harap perhatikan metode serupa untuk struktur data lainnya di kelas lain, misalnya di Sets
.
Daya tarik utama dapat mengurangi kekacauan karena obat generik untuk keselamatan jenis, karena penggunaan metode pabrik Jambu memungkinkan jenis disimpulkan sebagian besar waktu. Namun, argumen ini menahan lebih sedikit air sejak Java 7 tiba dengan operator berlian baru.
Tapi itu bukan satu-satunya alasan (dan Java 7 belum ada di mana-mana): sintaks steno juga sangat berguna, dan metode inisialisasi, seperti yang terlihat di atas, memungkinkan untuk menulis kode yang lebih ekspresif. Anda dapat melakukan dalam satu panggilan Guava apa yang dibutuhkan 2 dengan Koleksi Java saat ini.
Jika Kamu Tidak Bisa ...
Untuk Daftar yang Tidak Berubah
Gunakan kelas JDK Arrays
dan asList()
metode pabriknya, dibungkus dengan Collections.unmodifiableList()
:
List<String> l1 = Collections.unmodifiableList(Arrays.asList(anArrayOfElements));
List<String> l2 = Collections.unmodifiableList(Arrays.asList("element1", "element2"));
Perhatikan bahwa tipe yang dikembalikan untuk asList()
adalah List
menggunakan ArrayList
implementasi konkret , tetapi BUKAN java.util.ArrayList
. Ini adalah tipe bagian dalam, yang mengemulasi sebuah ArrayList
tetapi sebenarnya secara langsung mereferensikan array yang lewat dan membuatnya "menulis" (modifikasi tercermin dalam array).
Itu melarang modifikasi melalui beberapa List
metode API dengan cara hanya memperpanjang suatu AbstractList
(jadi, menambah atau menghapus elemen tidak didukung), namun itu memungkinkan panggilan set()
untuk menimpa elemen. Dengan demikian daftar ini tidak benar-benar abadi dan panggilan untuk asList()
dibungkus Collections.unmodifiableList()
.
Lihat langkah selanjutnya jika Anda membutuhkan daftar yang dapat diubah.
Untuk Daftar Mutable
Sama seperti di atas, tetapi dibungkus dengan aktual java.util.ArrayList
:
List<String> l1 = new ArrayList<String>(Arrays.asList(array)); // Java 1.5 to 1.6
List<String> l1b = new ArrayList<>(Arrays.asList(array)); // Java 1.7+
List<String> l2 = new ArrayList<String>(Arrays.asList("a", "b")); // Java 1.5 to 1.6
List<String> l2b = new ArrayList<>(Arrays.asList("a", "b")); // Java 1.7+
Untuk Tujuan Pendidikan: Cara Manual Yang Baik
// for Java 1.5+
static <T> List<T> arrayToList(final T[] array) {
final List<T> l = new ArrayList<T>(array.length);
for (final T s : array) {
l.add(s);
}
return (l);
}
// for Java < 1.5 (no generics, no compile-time type-safety, boo!)
static List arrayToList(final Object[] array) {
final List l = new ArrayList(array.length);
for (int i = 0; i < array.length; i++) {
l.add(array[i]);
}
return (l);
}