Oh, Java dizileri. Yüzlerce acemi yazılım geliştiricisinin yoğun sevgi ve nefretinin nesnesidirler. Başlatılmış bir diziye eleman eklemek imkansız dediler… Aslında mümkün ama klasik anlamda değil… ve pek de uygun değil. Halihazırda başlatılmış bir diziye yeni öğeler eklemek bir tür hiledir. Ancak, bu hileler bir röportajda ve bazen de bir programcının işinde işe yarayabilir. Veri tipini kullanmaktan zevk almanızı ve bunu verimli bir şekilde nasıl yapacağınızı bilmenizi sağlamak için Java dizisine yeni bir öğe ekleme hakkında bir kılavuz yazdık. Teori ve kod örneklerini dikkatlice incelemenin dışında, gönderide yer alan uygulama problemlerini kontrol ettiğinizden ve tamamladığınızdan emin olun.
Java'da Dizi Nedir?
Dizinin ne olduğunu ve Java'da nasıl oluşturulacağını hatırlayalım. Bunu hatırlarsanız, bir sonraki "Java Dizilerine Yeni Öğeler Eklemenin 5 Yolu" alt başlığına atlayabilirsiniz. Oracle'ın resmi Java belgeleri, dizilerin aynı veri türüne ait bir dizi değer olduğunu söylüyor. Bir tamsayı kümesi, Java'daki bir dizinin mükemmel bir örneğidir . Tanımladığınız tüm değerlerin, dizin adı verilen dizi içinde belirli bir konumu vardır . Dizileri bildirmenin ve başlatmanın yolları şunlardır:
int[] myArray = new int[10];
int[] myArray1 = {1, 0, 3, 17, 5, 6, 7, 8, 9, 10}
İlk durumda, bir myArray dizisi tanımladık ve Java'yı 10 öğelik bir diziye yer ayırmasını sağladık, ikinci myArray1'de , hemen içine 10 değer girdik. Her iki durumda da, 11. öğe basitçe diziye itilemez. Dizilerle işlem gerçekleştirmek için, geliştiriciler bir dizinin içerdiği değerlerin indekslerini değiştirir. Ne yapmalıyız? Diziye eklemenin en yaygın yollarına bir göz atalım.
Java Dizilerine Yeni Öğeler Eklemenin 5 Yolu
Pekala, işte değişmezi değişken göstermek için püf noktalarımız.- Diziyi Listeye Dönüştür
- Daha büyük kapasiteli yeni bir dizi oluşturun ve diziye yeni bir öğe ekleyin
- System.arraycopy()' yi uygulama
- Apache Commons kullanarak dizileri kopyalama
- ArrayCopyOf() yöntemini uygulama
1. Bir Diziyi Listeye Dönüştürme
Bir diziye doğrudan yeni bir öğe ekleyemediğimiz için yapılacak en iyi şey, bunları listelere dönüştürmek, yeni öğeler eklemek ve değerleri tekrar dizilere dönüştürmektir. Bir diziyi listeye dönüştürmenin ilk yolu , yeni bir ArrayList oluşturmak için asList() işlevini kullanmaktır . Değer aralığı başarıyla dönüştürüldükten sonra, değeri eklemek için ListAdd()' i kullanın. Artık bir diziyi düzenlemeniz gerekmediğinde, toArray() yönteminin yardımıyla orijinal veri türüne geri dönün . Tüm yöntemler ve dönüşümlerle, bu ilk başta kafa karıştırıcı görünebilir. İşleri temizlemek için asList() kullanma örneğine bir göz atalım .
// Code for adding Java arrays to a program
import java.lang.*;
import java.util.*;
class ArrayDemo{
//Let’s add a new element to an array
public static Integer[] addX(Integer myArray[], int x) {
int i;
//turn array into ArrayList using asList() method
List arrList = new ArrayList( Arrays.asList(myArray));
// adding a new element to the array
arrList.add(x);
// Transforming the ArrayList into an array
myArray = arrList.toArray(myArray);
return myArray;
}
public static void main(String[] args) {
int i;
//initial array
Integer myArray[] = { 0, 1, 2, 45, 7, 5, 17};
//print the initial array out
System.out.println("Initial Array: "
+ Arrays.toString(myArray));
//element to be added
int x = 28;
// call the method to add x in myArray
myArray = addX(myArray, x);
// print the updated array out
System.out.println("Array with " + x + " added: "
+ Arrays.toString(myArray));
}
}
Çıktı:
İlk Dizi: [0, 1, 2, 45, 7, 5, 17] 28'li dizi eklendi: [0, 1, 2, 45, 7, 5, 17, 28]
Böylece, programda başarılı bir şekilde 7 değerden oluşan myArray dizisini oluşturduk , doldurduk ve çıktısını aldık. Sonra on değerin bizim için yeterli olmadığına karar verdik. Arrays.asList yöntemini kullanarak myArray'i bir ArrayList arrList'e dönüştürdük . İşte 28, eklenecek eleman. Bunu ArrayList arrList'e ekledik ve ardından toArray() yöntemini kullanarak tekrar bir diziye dönüştürdük ve yeni diziyi yazdırdık.
2. Daha büyük kapasiteli yeni bir dizi oluşturun
Bir diziye daha fazla öğe eklemenin en yaygın yollarından biri sıfırdan yeni, daha büyük bir dizi oluşturmak, eski öğelerin öğelerini koymak ve yeni öğeler eklemektir. İşte sürecin adım adım izlenecek yolu:- a+n kapasiteli yeni bir dizi oluşturun (a — orijinal dizi kapasitesi, n — eklemek istediğiniz öğe sayısı).
- Önceki veri aralığının tüm öğelerini ve yeni değerleri yenisine ekleyin.
- Ortaya çıkan diziyi yazdırın.
// Java Program to add an element in an Array
import java.lang.*;
import java.util.*;
class ArrayDemo {
//Method to add an element x into array myArray
public static int[] addX(int myArray[], int x) {
int i;
// create a new array of a bigger size (+ one element)
int newArray[] = new int[myArray.length + 1];
// insert the elements from the old array into the new one
for (i = 0; i < myArray.length; i++)
newArray[i] = myArray[i];
newArray[myArray.length] = x;
return newArray;
}
public static void main(String[] args) {
int i;
// initial array of size 10
int arr[]
= {0, 1, 2, 45, 7, 5, 17};
// print the initial array
System.out.println("Initial Array: " + Arrays.toString(arr));
// element to be added
int x = 28;
// call the addX method to add x in arr
arr = addX(arr, x);
// print the updated array
System.out.println("Array with " + x + " added:" + Arrays.toString(arr));
}
}
Çıktı:
Başlangıç Dizisi: [0, 1, 2, 45, 7, 5, 17] 28'li dizi eklendi:[0, 1, 2, 45, 7, 5, 17, 28]
Bir diziye yeni bir öğe eklemek bu şekilde en kolay olanıdır.
3. System.arrayCopy() öğesinin uygulanması
System.arrayCopy(), bir kaynak dizinin hedefinde daha büyük bir dizi tahsis etmek için yaygın olarak kullanılan bir yöntemdir. Bir geliştirici, yöntemin köşeli parantezleri içinde yeni bir diziye kopyalamak istediği diziyi belirtebilir. Yöntemin nasıl çalıştığını görmek ve kendiniz kullanmayı denemek için aşağıdaki örneğe bir göz atın ve çalıştırmayı deneyin:
import java.util.Arrays;
class ArrayDemo {
private static Integer[] addElement(Integer[] myArray, int newElement) {
//we create a new Object here, an array of bigger capacity
Integer[] array = new Integer[myArray.length + 1];
System.arraycopy(myArray, 0, array, 0, myArray.length);
array[myArray.length] = newElement;
return array;
}
public static void main(String[] args) {
Integer[] myArray = {20, 21, 3, 4, 5, 88};
System.out.println("myArray before adding a new element: " + Arrays.toString(myArray));
myArray = addElement(myArray, 12);
System.out.println("myArray before adding a new element: " + Arrays.toString(myArray));
}
}
Çıktı:
myArray yeni eleman eklemeden önce: [20, 21, 3, 4, 5, 88] myArray yeni eleman eklemeden önce: [20, 21, 3, 4, 5, 88, 12]
Burada bir myArray dizisi oluşturduk , çıktısını aldık ve System.arrayCopy() üzerine kurulu addElement yöntemimizi kullanarak yeni bir öğe ekledik .
4. Dizileri kopyalamak için Apache Commons'ı kullanma
Standart olmayan bir yol kullanalım. Yani, üçüncü taraf bir kitaplık olan Apache Commons lang. Yeniden kullanılabilir Java bileşenlerinin tüm yönlerine odaklanan Apache Commons projesinin bir parçasıdır. Proje hakkında bilgi gereksiz olmayacaktır. Apache Commons dilinde, özellikle genişleyen dizilere izin vermek için tasarlanmış bir add() yöntemi vardır , kodlayıcılara çok fazla zaman ve emek kazandırır. Bu Apache Commons add() yönteminin , zorlu bir sınava veya mülakat sorusuna yanıt vermeniz gerekebileceği ihtimaline karşı System.arraycopy() yöntemini çağırmaya dayalı olduğunu akılda tutmakta fayda var . Kitaplıkları projenize eklemek için Apache Commons web sitesine gidin ve kitaplıkları indirin. Ardından Dosya → Proje Yapısı → Kitaplıklar > + seçeneğine gidin ve indirilen jar dosyalarını seçin.
import org.apache.commons.lang3.ArrayUtils;
import java.util.Arrays;
class ArrayDemo {
private static <T> T[] append(T[] arr, T element) {
return ArrayUtils.add(arr, element);
}
public static void main(String[] args) {
Integer[] myArray = { 0, 1, 2, 3, 4};
System.out.println("myArray: " + Arrays.toString(myArray));
myArray = append(myArray, 5);
System.out.println("new Array with the number added: " + Arrays.toString(myArray));
}
}
Çıktı:
myArray: [0, 1, 2, 3, 4] eklenen sayı ile yeni Dizi: [0, 1, 2, 3, 4, 5]
5. ArrayCopyOf()'u Uygulamak
ArrayCopyOf(), bir diziye yeni bir öğe eklemek için bir yöntem daha. Apache Commons lang add() gibi, bu işlemi yapmak için dahili olarak System.arraycopy() öğesini çağırır . Ancak çoğu geliştirici, kodu kısa ve okunabilir tutmalarına izin verdiği için ArrayCopyOf()' u tercih eder. İşte bir diziye yeni öğeler eklemek için ArrayCopyOf() kullanmanın bir örneği :
import java.util.Arrays;
class ArrayDemo {
private static <X> X[] addElement(X[] myArray, X element) {
X[] array = Arrays.copyOf(myArray, myArray.length + 1);
array[myArray.length] = element;
return array;
}
public static void main(String[] args) {
Integer[] myArray = {20, 21, 3, 4, 5, 88};
System.out.println("myArray before adding a new element: " + Arrays.toString(myArray));
myArray = addElement(myArray, 12);
System.out.println("myArray before adding a new element: " + Arrays.toString(myArray));
}
}
Çıktı:
myArray yeni eleman eklemeden önce: [20, 21, 3, 4, 5, 88] myArray yeni eleman eklemeden önce: [20, 21, 3, 4, 5, 88, 12]
Çözüm
Bir diziye öğelerin nasıl ekleneceğini bilmek, geliştiricilerin eski kodu işlevselliğinden ve okunabilirliğinden ödün vermeden hızlı bir şekilde güncellemesine yardımcı olur… Veya sadece röportajı geçmek için. Java dizilerine öğe eklemenin farklı yolları olduğundan, rahat olduğunuz yöntemi seçmekten çekinmeyin.
Daha fazla okuma: |
---|
GO TO FULL VERSION