SORU
21 EYLÜL 2008, Pazar


Java nasıl bir dizi nesneleri kaldırmak mı?

Bir dizi verildinNesneler, hadi bir olduğunu söylüyorlardizeler dizisiaşağıdaki değerleri vardır , ve:

foo[0] = "a";
foo[1] = "cc";
foo[2] = "a";
foo[3] = "dd";

Ben yapmak zorunda silmek için/tüm dizeleri/nesneleri eşit çıkarın<. "".^ güçlü dizideki?

CEVAP
21 EYLÜL 2008, Pazar


Eğer kullanıma hazır, lütfen benim için kod kaydırma eğer istersen ["" (kesim sonrası). Edit3 Gerisi gelecek kuşaklar için burada.]

Dışarı Çöpçü eti için fikir:

List<String> list = new ArrayList<String>(Arrays.asList(array));
list.removeAll(Arrays.asList("a"));
array = list.toArray(array);

Edit: ben şimdi kullanma Arrays.asList yerine Collections.singleton: singleton, sınırlı bir giriş, oysa asList yaklaşım sağlar ekleyin diğer dizelere filtre daha sonra: Arrays.asList("a", "b", "c").

Edit2: yukarıdaki yaklaşım aynı dizi dizi hala aynı uzunluktadır (böylece) korur; son sonra öğesi null olarak ayarlanır. Eğer istersenizyenidizi gerektiği gibi tam olarak bunu kullan boy:

array = list.toArray(new String[0]);

Edit3: Eğer aynı sınıfta sık sık bu kodu kullanırsanız, sizin sınıf için: bu eklemeyi düşünebilirsiniz

private static final String[] EMPTY_STRING_ARRAY = new String[0];

Sonra fonksiyonu haline gelir:

List<String> list = new ArrayList<>();
Collections.addAll(list, array);
list.removeAll(Arrays.asList("a"));
array = list.toArray(EMPTY_STRING_ARRAY);

Bu da başka newed fonksiyon denir her zaman bu işe yaramaz boş bir dize ve diziler ile yığın çöp duracaktır.

cynicalman önerisi (yorum) ayrıca yığın çöp ile yardımcı olacaktır, ve adalet için belirtmeliyim:

array = list.toArray(new String[list.size()]);

Açık boyutu yanlış yapmak daha kolay (yanlış listesi size() arama gibi) olabilir, çünkü benim yaklaşım tercih ederim.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • khloe brooks

    khloe brooks

    25 Temmuz 2011
  • Makeup Lover

    Makeup Lover

    12 HAZİRAN 2011
  • TechSmartt

    TechSmartt

    29 Aralık 2010