Programımın yürütülmesi sırasında boyutu ve değerleri değişecek şekilde bir tamsayı dizisini nasıl başlatacağımı merak ediyordum, herhangi bir öneriniz var mı?
Programımın yürütülmesi sırasında boyutu ve değerleri değişecek şekilde bir tamsayı dizisini nasıl başlatacağımı merak ediyordum, herhangi bir öneriniz var mı?
Yanıtlar:
Evet: ArrayList kullan .
Java'da "normal" diziler sabit boyuttadır. Onlara bir beden vermelisiniz ve onları genişletemez veya küçültemezsiniz. Boyutu değiştirmek için, yeni bir dizi oluşturmanız ve istediğiniz verileri kopyalamanız gerekir - bu sizin için verimsiz ve acı verici bir durumdur.
Neyse ki, ortak veri yapılarını ve diğer kullanışlı araçları uygulayan her tür yerleşik sınıf vardır. Tam listesi için Java 6 API'sini kontrol etmek isteyeceksiniz .
Bir uyarı: ArrayList yalnızca nesneleri (ör. Tamsayılar) tutabilir, ilkelleri (ör. İnts) tutamaz. ÇOĞU durumda, otomatik kutulama / otomatik kutulama bunu sizin için sessizce halledecektir , ancak ne yaptığınıza bağlı olarak bazı garip davranışlar yaşayabilirsiniz.
size
program devam ederken dizinin boyutu eşleşecek şekilde değişmez ; size
satır yürütüldüğünde hangi boyutta olursa olsun alır .
null
ile sonuçlanır. Herhangi bir fikriniz neden?
Java'daki diziler sabit boyuttadır. İhtiyacınız olan şey, Java'da bulunan son derece değerli Koleksiyonlardan biri olan bir ArrayList'tir.
Onun yerine
Integer[] ints = new Integer[x]
kullan
List<Integer> ints = new ArrayList<Integer>();
Daha sonra kullandığınız listeyi değiştirmek için ints.add(y)
ve ints.remove(z)
diğer birçok kullanışlı yöntem arasında uygun Javadoc'larda bulabilirsiniz.
Java'da bulunan Koleksiyonlar sınıflarını çok güçlü oldukları ve size Java ile yeni başlayanların gereksiz yere kendilerini yeniden yazma eğiliminde oldukları birçok yerleşik işlevsellik sağladıkları için incelemenizi şiddetle tavsiye ederim.
List<Integer>
Bunun yerine neden kullanıyorsun ArrayList<Integer>
?
Diziler, somutlaştırıldıktan sonra sabit boyuttadır. Bunun yerine bir Liste kullanabilirsiniz.
Otomatik kutulama bir Listeyi bir diziye benzer şekilde kullanılabilir hale getirir, içine basitçe int-değerleri koyabilirsiniz:
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
Ben önceki cevaplar düşündüren katılmıyorum ArrayList
çünkü ArrayList
olduğunu değil Dinamik Dizi ancak Liste bir dizi tarafından desteklenen. Aradaki fark, aşağıdakileri yapamayacak olmanızdır:
ArrayList list = new ArrayList(4);
list.put(3,"Test");
Size bir IndexOutOfBoundsException verecektir, çünkü bu konumda henüz hiçbir öğe yoktur, ancak destek dizisi böyle bir eklemeye izin verse bile. Dolayısıyla, @ randy-lance tarafından önerildiği gibi özel bir genişletilebilir Array uygulaması kullanmanız gerekir
Simple code for dynamic array. In below code then array will become full of size we copy all element to new double size array(variable size array).sample code is below
public class DynamicArray {
static int []increaseSizeOfArray(int []arr){
int []brr=new int[(arr.length*2)];
for (int i = 0; i < arr.length; i++) {
brr[i]=arr[i];
}
return brr;
}
public static void main(String[] args) {
int []arr=new int[5];
for (int i = 0; i < 11; i++) {
if (i<arr.length) {
arr[i]=i+100;
}
else {
arr=increaseSizeOfArray(arr);
arr[i]=i+100;
}
}
for (int i = 0; i < arr.length; i++) {
System.out.println("arr="+arr[i]);
}
}
}
Kaynak: Dinamik dizi nasıl yapılır
Küçük ölçekli boyutlarla uğraşmak için Liste kullanılması önerilir.
Çok sayıda numaranız varsa, Liste ve otomatik kutulamayı ASLA kullanmayın.
<Tamsayı> listesi listesi
Her bir tamsayı için otomatik olarak yeni bir Tamsayı oluşturulur. Listenin boyutu arttığında yavaşladığını göreceksiniz. Bu Tamsayılar gereksiz nesnelerdir. Bu durumda tahmini bir beden kullanmak daha iyi olur,
int[] array = new int[ESTIMATED_SIZE];
List
Bunun yerine a kullanmaya ne dersiniz ? Örneğin,ArrayList<integer>
Bir dizinin boyutunu değiştiremezsiniz. Bununla birlikte, doğru boyutta yeni bir dizi oluşturabilir ve verileri eski diziden yeniye kopyalayabilirsiniz.
Ancak en iyi seçeneğiniz, jacarta commons'tan IntList'i kullanmaktır. ( burada )
Tıpkı bir List gibi çalışır, ancak daha az yer kaplar ve bundan daha etkilidir, çünkü sarmalayıcı nesnelerini int'ler üzerinde depolamak yerine int'leri depolar (Tamsayı sınıfı budur).
Bu soruyu cevapladım ve hayır, bir dizi listesine veya başka bir şeye ihtiyacınız yok, bu bir ödevdi ve evet dizilerinin boyutu artabilsin diye tamamladım. İşte Java Dinamik Dizisi nasıl kullanılır bağlantısı ve işte Java Dinamik dizilerini yanıtladığım sorumun bağlantısı
int[] array = new int[size];
size
bir değişkendir, ancak bir dizinin uzunluğu sabit olmalı, değil mi? @Lord Torgamus