2011-05-09 17 views
5

gelen öğe kaldırmak için nasıl örneğin bir dizi var. Bunu yapmanın bir yolunu bulamıyorumbir diziden

{{"a","1"}, 
{"c","1"}} 

: gibi dizi görünecek biçimde Mesela ben, öğe "b" kaldırmak istiyorum. Şimdiye kadar ne burada bulduk benim için çalışmıyor :(

+0

Bir dizi yerine bir "ArrayList" kullanmanız daha iyi olur. – Behrang

+0

olası bir kopyası [java'daki bir diziden nesneleri nasıl kaldırabilirim?] (Http://stackoverflow.com/questions/112503/how-do-i-remove-objects-from-an-array-in-java) – McDowell

+0

hayır .... iki kopya değil. – Peter

cevap

10

Diziden bir elemanı kaldıramazsınız. Dizi tahsis edildiğinde bir Java dizisinin boyutu belirlenir ve değiştirilemez. Yapabileceğiniz en iyisi:

  • Ata ilgili pozisyonda diziye null; Örneğin.

    test[1] = null; 
    

    Bu null değerlerdir dizide "delikleri" ile uğraşan problemiyle bırakır. (Bazı durumlarda bu sorun değil ... ama çoğu durumda.)

  • Öğe kaldırılmış olan yeni bir dizi oluşturun; Örneğin.

    String[][] tmp = new String[test.length - 1][]; 
    int j = 0; 
    for (int i = 0; i < test.length; i++) { 
        if (i != indexOfItemToRemove) { 
         tmp[j++] = test[i]; 
        } 
    } 
    test = tmp; 
    

    Apache Commons ArrayUtils sınıf örn Object[] ArrayUtils.remove(Object[], int) daha düzgünce bunu yapacak bazı statik yöntemler (vardır, ama aslında bu yaklaşım, yeni bir dizi nesne oluşturur kalır.

Daha iyi bir yaklaşım olur Uygun bir Collection türü kullanmak için, örneğin ArrayList türünde, öğeyi belirli bir konumda kaldırmanıza izin veren bir yöntem vardır.

6

düzenli Java diziden öğeleri "ortadan kaldırmayı" yerleşik bir yolu yoktur.

Ne Kullanmak istediğiniz bir ArrayList olduğunu.

2

Dizideki girdiyi null (test[0][1] = null;) olarak ayarlayabilirsiniz. Ancak, öğeyi diziden daha az bir öğeye sahip olacak şekilde "kaldırmak", diziyi yeniden oluşturmadan gerçekleştirilemez. Veri yapısı düzenli olarak bir ArrayList (veya ihtiyaçlarınıza bağlı olarak başka bir Koleksiyon sınıfı) daha uygun olabilir.

0

Çözümüm:

Bir öğeden bir nesneyi kaldıramazsınız => doğru, ancak geçerli diziyi değiştirmek için bir şeyler yapabiliriz. dizge'nin endeksini hesaplamak için

No need assign null to the array at the relevant position; e.g. 

test[1] = null; 

Create a new array with the element removed; e.g. 

String[][] temp = new String[test.length - 1][]; 

İhtiyaç/dizi kaldırmak için: IndexToRemove

for (int i = 0; i < test.length-1; i++) { 
       if (i<IndexToRemove){ 
        temp[i]=test[i]; 
       }else if (i==IndexToRemove){ 
        temp[i]=test[i+1]; 
       }else { 
        temp[i]=test[i+1]; 
       } 
} 
test = temp; 

yararlı Umut!