Diziler, kodlamada sıklıkla kullanılır ve aynı türden birden çok değeri tek bir değişkende depolamanın bir yoludur. Bir kodlayıcının bir diziyi tersine çevirmek istemesinin birçok nedeni olabilir. Örneğin, bir problemin mantığının son elemandan başlaması gerektiğinde bir diziyi tersine çevirmek gerekli olabilir. Bu durumda, en iyi uygulama tersine çevirmeyi yapmak ve ardından kodda gerekli olan yerde tersine çevrilmiş diziyi kullanmaktır. Dahası, bir diziyi tersine çevirmek, Java Juniors röportajlarında çok popüler bir görevdir.
Bir Diziyi Tersine Çevirme
Bir diziyi tersine çevirmenin birçok yolu vardır ve burada 5'i ele alıyoruz. Seçenek 1 için, orijinal dizinin sonundan (azalan) artan sırada doldurulmuş ek bir dizi kullanılarak bir dizi tersine çevrilir, Seçenek 2'de yerinde ters çevirme başlangıçtaki ve sondaki dizi öğelerinin değiştirildiği yerde gerçekleştirilir, Seçenek 3'te, Tersine çevirmek için Koleksiyonlar çerçevesindeki reverse() yöntemi kullanılır, Seçenek 4'te List.add() ve List.remove() kullanılır ve son olarak Seçenek 5'te özyineleme kullanılır.
Seçenek 1: Ek Dizi Kullanarak Bir Diziyi Tersine Çevirme
Ek bir dizi kullanarak bir diziyi tersine çevirmek için basit bir yöntem yazalım . Bu seçenek, orijinal dizinin son elemanından başlayarak azalan sırayla doldurulan ek bir dizi kullanır, yani ilk eleman orijinal dizideki son eleman ile aynıdır, ikincisi sondan ikinci ile aynıdır ve böylece ek dizi dolana kadar açık.
import java.util.Arrays;
public class ReverseArrayDemo {
public static void main(String[] args) {
int[] array = {7, 8, 9, 10, 11};
System.out.println("Array : " + Arrays.toString(array)); // print array
// Call function to get reversed array
int[] reversedArray = reverse(array);
System.out.println("Reversed array : " + Arrays.toString(reversedArray)); // print reversed array
}
// Method returns a new reversed array, based on the array which was passed to it.
static int[] reverse(int[] array) {
int[] newArray = new int[array.length];
for (int i = 0; i < array.length; i++) {
newArray[array.length - 1 - i] = array[i];
}
return newArray;
}
}
Bu örnekte, bir diziyi tersine çeviren ve kendisine iletilen diziye bağlı olarak yeni bir ters dizi döndüren bir yöntem yazdık. dizi main içinde bildirilir ve sonra bir yöntem, ters çağrılır. Yöntemin argümanı dizidir. reverse yönteminde , newArray adlı yeni bir dizi oluşturulur ve array ile aynı boyuttadır , yalnızca tamamen boştur. newArray'i doldurmak için bir for döngüsü kullanılır ve dizinin tüm uzunluğu boyunca çalışır. Bu, bir dizinin ilk elemanından başlayarak ve onu yeniArray'in son elemanına atayarak yapılır., ardından dizimizin ikinci öğesini alıp onu yeniArray öğesinin sondan ikinci öğesine atayarak ve böyle devam ederek; newArray geriye doğru doldurulur. for döngüsü tamamlandığında, newArray tamamen doludur ve dizinin tam tersidir .
Dizi : [7, 8, 9, 10, 11] Ters dizi : [11, 10, 9, 8, 7]
Seçenek 2: Bir Dizinin Öğelerini Ters Sırayla Yazdırın
Bir diziyi tersine çevirmek için bu seçenek için, ek bir dizi kullanmaya gerek yoktur ve bir dizi listesine dönüştürülmez. Bunun yerine, dizi öğeleri yerinde ters sırayla konur . Bu, aslında değiştirildikleri anlamına gelir. İlk eleman son elemanla değiştirilir, ikinci eleman sondan ikinci elemanla değiştirilir ve bu böyle devam eder. Bir for döngüsü kullanılır ve bu tamamlandığında dizi tersine dönmüş olur. Kod şöyle görünür:
import java.util.Arrays;
/*
reversing an array in-place
*/
public class ReverseArrayDemo {
public static void main(String[] args) {
int[] array = {1, 4, 9, 16, 25};
System.out.println("Array before reverse : " + Arrays.toString(array));
arrayReverse(array);
System.out.println("Array after reverse : " + Arrays.toString(array));
}
//arrayReverse is a method that reverses array in-place
static void arrayReverse(int[] array) {
for (int i = 0; i < array.length / 2; i++) {
int temp = array[i];
array[i] = array[array.length - i - 1];
array[array.length - i - 1] = temp;
}
}
}
Orijinal dizi, Arrays.toString(array) kullanılarak bir String olarak yazdırılır ve ardından dizimiz bir bağımsız değişken olarak reverse ' a iletilir . For döngüsündeki ters yöntemde , temp adlı bir değişken oluşturulur ve kullanılır. For döngüsünde ters sıra üç adımda elde edilir:
- ilk öğeyi geçici olarak atama
- son elemanın ilk elemana atanması
- son öğeye geçici atama
Tersten önceki dizi : [1, 4, 9, 16, 25] Tersten sonraki dizi : [25, 16, 9, 4, 1]
3. Seçenek: Collections.reverse() işlevini kullanma
Java'da, varolan Koleksiyonlar çerçevesinin bir parçası olan ters yöntem, bir diziyi tersine çevirmek için kullanılabilir. Tersini yapmak için kullanalım.
import java.util.Arrays;
import java.util.Collections;
public class ReverseArrayDemo {
public static void main(String[] args) {
Integer[] array = {1, 4, 9, 16, 25};
System.out.println("Array before reverse : " + Arrays.toString(array));
reverse(array);
System.out.println("Array after reverse : " + Arrays.toString(array));
}
//method that reverses an array
static void reverse(Integer[] array) {
Collections.reverse(Arrays.asList(array));
}
}
main'de dizi oluşturulur ve 5 sayı içeren bir Tamsayı dizisi olarak doldurulur . Daha sonra Arrays.asList(array) kullanılarak bir liste olarak yazdırılır ve ardından reverse işlevi çağrılır ve dizi bu işleve bir argüman olarak iletilir. reverse içinde Collections.reverse kullanılır ve bu , dizinin kendisi yerine Arrays.asList(array) dizi listesinde kullanılır . Ardından bir sonraki adımda, System.out.println kullanılarak bir dizinin nasıl ters sırada yazdırılacağı gösteriliyor ve bu sefer her öğe aynı satıra yazdırılıyor:
Tersten önceki dizi : [1, 4, 9, 16, 25] Tersten sonraki dizi : [25, 16, 9, 4, 1]
Seçenek 4: List.add() ve List.remove() kullanarak bir Diziyi ters çevirin
Bu yeni seçenekte, tersine çevirmek için List.add() ve List.remove() kullanılır. Bunun çalışma şekli, dizinin bir listeye dönüştürülmesi ve listenin son öğesinin çıkarılıp listenin başına konulmasıdır. Tüm liste yinelendikten sonra, yeni liste orijinalin tersidir. main() yönteminde 5 sayıdan oluşan bir dizi oluşturulur. Ardından dizinin orijinal durumu konsola gönderilir. Bu dizi daha sonra, reverse() yöntemine bir argüman olarak konur . Bu yöntem temel olarak son elemanı kaldırarak ve onu dizinin önüne ekleyerek çalışır. Son olarak, dizinin yeni (tersine çevrilmiş) durumu konsola gönderilir. ters ()yönteminde, dizi , add() ve remove() yöntemlerinin tersine çevirmeyi gerçekleştirmesini sağlamak için Arrays.asList(array) aracılığıyla bir Listeye yazılır . Bu yöntem temel olarak son elemanı kaldırarak ve onu dizinin önüne ekleyerek çalışır. reverse()' in kullandığı adımlar aşağıdaki gibidir. Listenin öğelerini tersine çevirmek için bir for döngüsü kullanır . Bunu i değişkenini başlatarak yapar . Başlangıçta i 0'a ayarlanır. i = 0 olduğunda, listedeki list.size() - 1'deki öğe kaldırılır ve i < list.size() - 1 olduğundan bu her zaman son öğe olacaktır.. remove() yöntemi kaldırdığı öğeyi geri döndürdüğü için , bu öğe artık i = 0 dizinindeki listeye eklenir , yani başa eklenir. Listenin geri kalanı daha sonra sağa kaydırılır, ancak yeni liste hala aynı sayıda öğeye sahiptir, yani size . for döngüsünün i'nin bir sonraki değeri olan i = 1 ile yürütülmesine devam edilirken , aynı adımlar dizisi gerçekleştirilir, böylece son eleman kaldırılır ve i = 1'de nums'a alınır ve liste sağa kaydırılır. Bu, i'nin son artımlı değerine ve listedeki tüm öğeler değiştirilene kadar devam eder. için ikincii dizinli listenin döngü öğesi, i dizinli dizi öğesine ayarlanır; burada i , 0'dan list.size() - 1'e kadardır . Özetlemek gerekirse, kullanılan adımlar şunlardır: Adımlar:- ben = 0
- list.size() - 1'deki öğeyi kaldır
- i = 0'da list.size() - 1 konumunda olan öğeyi ekleyin
- artış ben
- i'nin son artımlı değeri kullanılıncaya kadar 2 ila 4 arasındaki adımları tekrarlayın (3. adımda i için yeni değerlerle)
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ReverseArrayDemo {
public static void main(String[] args) {
Integer[] array = new Integer[]{1, 4, 9, 16, 25};
System.out.println("Array before reverse : " + Arrays.toString(array));
reverse(array);
System.out.println("Array after reverse : " + Arrays.toString(array));
}
static void reverse(Integer[] array) {
List list = new ArrayList<>(Arrays.asList(array));
for (int i = 0; i < list.size() - 1; i++) {
list.add(i, list.remove(list.size() - 1));
}
for (int i = 0; i < list.size(); i++) {
array[i] = list.get(i);
}
}
}
Bu kod çıktıyı verir:
Tersten önceki dizi : [1, 4, 9, 16, 25] Tersten sonraki dizi : [25, 16, 9, 4, 1]
Seçenek 5: Bir Diziyi Özyinelemeyle Tersine Çevirme
Özyineleme yöntemi, kodlamada yaygın olarak kullanılır ve bir dizinin nasıl tersine çevrileceğine ilişkin verimli bir yöntem oluşturmak için kullanılabilir. Bu seçenekte, dizi bir listeye dönüştürülür ve ardından kod, listenin sonundaki son öğeyi her kaldırdığında reverse() yöntemine gider ve listeye kaldırılan değerler ters sırayla eklenir. Önceki yöntemlerde olduğu gibi 5 sayıdan oluşan bir dizi oluşturulur. Daha sonra, reverse() işlevine bir argüman olarak iletilir . reverse() işleminde yapılan ilk şey, diziyi bir listeye dönüştürmek ve liste boyutunu kontrol etmektir. Yalnızca bir öğesi varsa veya boşsa, yöntem tamamlanır ve geri döner. Değilse, ilk öğe kaldırılır ancak bir Tamsayıya kopyalanır, değer _ Yöntem reverse() daha sonra tekrar çağrılır ve özyineleme yeniden başlar. Fonksiyon girildiğinde, aynı adımlar gerçekleştirilir, burada bir boyut kontrolü yapılır, eğer liste 1'den büyükse, sonraki adım ilk elemanı kaldırmak ve ardından tekrar özyineleme yapmak olacaktır. Listenin boyutu 1 olduğunda, reverse() çağrıldığı yere geri döner ve ardından orijinal listenin tam tersini oluşturmak için listeye eklenen her değere sahiptir.
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ReverseArrayDemo {
public static void main(String[] args) {
Integer[] array = new Integer[]{1, 4, 9, 16, 25};
System.out.println("Array before reverse : " + Arrays.toString(array));
List list = new ArrayList<>(Arrays.asList(array));
reverse(list);
System.out.println("Array after reverse : " + Arrays.toString(list.toArray()));
}
public static void reverse(List list) {
if (list== null || list.size() <= 1) {
return;
}
Integer value = list.remove(0);
reverse(list);
list.add(value);
}
}
Çıktı:
Tersten önceki dizi : [1, 4, 9, 16, 25] Tersten sonraki dizi : [25, 16, 9, 4, 1]
GO TO FULL VERSION