SORU
30 EKİM 2009, Cuma


dinamik bir dizi boyutları, java?

Gibi bir ifadesi var yani xClass bir dizi yüklemek istiyorum bir sınıf xClass var

xClass mysclass[] = new xClass[10];
myclass[0] = new xClass();
myclass[9] = new xClass();

Sorun 10 eğer ihtiyacım olacak mı bilmiyorum. 8 ya da 12 numara ihtiyacım olabilir. Çalışma zamanı kadar bilemeyeceğim. Anında bir dizideki öğe sayısını değiştirebilir miyim? Eğer öyleyse, nasıl?

Sağlamak için mümkün olabilir herhangi bir yardım için çok teşekkürler

CEVAP
30 EKİM 2009, Cuma


Bir dizinin boyutu bir kez oluşturduktan sonra değiştirebilirsiniz. Sizin de ihtiyacınız olacak düşündüğünüzden daha büyük ayırmaya ya da büyümeye ihtiyacı ayrılacak olan yükünü kabul. Ne zaman yeni bir tane tahsis edilecek ve yeni eski verileri kopyalamak için:

int oldItems[] = new int[10];
for (int i=0; i<10; i  ) {
  oldItems[i] = i 10;
}
int newItems[] = new int[20];
System.arraycopy(oldItems, 0, newItems, 0, 10);
oldItems = newItems;

Eğer bu durumda kendinizi bulursanız, son derece yerine Java Koleksiyonları kullanmanızı tavsiye ediyorum. Özellikle ArrayList aslında bir dizi sarar ve gerekli olarak diziyi yetiştirmek için: mantık ilgilenir

List<xClass> mysclass = new ArrayList<xClass>();
myclass.add(new xClass());
myclass.add(new xClass());

Genellikle bir ArrayList bir dizi zaten çeşitli nedenlerle için tercih edilen bir çözümdür. Bir kere, diziler değiştirilebilir. Eğer bir sınıf varsa bunu yapar:

class Myclass {
  private int items[];

  public int[] getItems() { return items; }
}

bir arayan savunma kopyalama her çeşit yol açan özel veri üyesi, değiştirmek gibi bir sorun yarattın. Liste sürümü ile karşılaştırın:

class Myclass {
  private List<Integer> items;

  public List<Integer> getItems() { return Collections.unmodifiableList(items); }
}

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • bmarian22

    bmarian22

    22 Aralık 2007
  • RickardRick

    RickardRick

    9 Mart 2007
  • Within Temptation

    Within Tempt

    18 EYLÜL 2006