(eski iş parçacığı, ama hiçbiri Guava veya diğer kütüphanelerden ve diğer bazı ayrıntılardan bahsetmediği gibi sadece 2 sent)
Yapabiliyorsanız, Guava Kullanın
Bu maskaralıkları büyük ölçüde basitleştiren Guava yolunu belirtmeye değer:
kullanım
Değişmez Bir Liste İçin
Kullanım ImmutableList
sınıfını ve onun of()
ve copyOf()
fabrika yöntemleri (elementler null olamaz) :
List<String> il = ImmutableList.of("string", "elements"); // from varargs
List<String> il = ImmutableList.copyOf(aStringArray); // from array
Değişken Listesi İçin
Lists
Sınıfı ve newArrayList()
fabrika yöntemlerini kullanın :
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
Lütfen diğer sınıflardaki diğer veri yapıları için de benzer yöntemleri not edin, örneğin Sets
.
Ana cazibe, Guava fabrika yöntemlerinin kullanımı türlerin çoğu zaman çıkarılmasına izin verdiği için, tip güvenliği için jeneriklerden kaynaklanan dağınıklığı azaltmak olabilir . Ancak, Java 7 yeni elmas operatörüne geldiğinden bu argüman daha az su tutar.
Ancak tek neden bu değil (ve Java 7 henüz her yerde değil): steno sözdizimi de çok kullanışlıdır ve yukarıda görüldüğü gibi yöntem başlatıcıları daha anlamlı kod yazmanıza izin verir. Geçerli Java Koleksiyonları ile 2 alan bir Guava çağrısı yaparsınız.
Yapamazsan ...
Değişmez Bir Liste İçin
JDK'nın Arrays
sınıfını ve aşağıdakilerle asList()
sarılmış fabrika yöntemini kullanın Collections.unmodifiableList()
:
List<String> l1 = Collections.unmodifiableList(Arrays.asList(anArrayOfElements));
List<String> l2 = Collections.unmodifiableList(Arrays.asList("element1", "element2"));
İçin döndürülen tip unutmayın asList()
bir olan List
bir beton kullanarak ArrayList
uygulama ama o değil java.util.ArrayList
. Bu, öykünen öykünen ArrayList
ancak aslında doğrudan geçirilen diziye başvuruda bulunan ve "yazarak" yapan değişikliklerdir (değişiklikler diziye yansıtılır).
List
API'nın bazı yöntemlerinde yalnızca bir genişletme yoluyla değişiklik yapılmasını yasaklar AbstractList
(böylece, öğe ekleme veya kaldırma desteklenmez), ancak set()
öğelerin geçersiz kılınmasına yönelik çağrılara izin verir . Bu yüzden bu liste tam olarak değişmez değildir ve bir çağrı asList()
ile sarılmalıdır Collections.unmodifiableList()
.
Değiştirilebilir bir listeye ihtiyacınız varsa bir sonraki adıma bakın.
Değişken Listesi İçin
Yukarıdaki ile aynı, ancak gerçek bir ile sarılmış 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+
Eğitim Amaçlı: Manuel Olmanın İyi Yolu
// 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);
}