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

  • Jack Vale Films

    Jack Vale Fi

    8 ŞUBAT 2007
  • jkimisyellow...ish

    jkimisyellow

    8 Temmuz 2009
  • Missouri Star Quilt Company

    Missouri Sta

    18 ŞUBAT 2009