CodeGym/Java Blogu/Rastgele/Java'da Bir Diziyi Tersine Çevirme
John Squirrels
Seviye
San Francisco

Java'da Bir Diziyi Tersine Çevirme

grupta yayınlandı
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.Java'da Bir Diziyi Ters Çevir - 1

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:
  1. ilk öğeyi geçici olarak atama
  2. son elemanın ilk elemana atanması
  3. son öğeye geçici atama
Bu daha sonra bu kez ikinci eleman ve son elemandan ikinci eleman için tekrar gerçekleştirilir ve bu böyle devam eder. Bu, dizinin ardışık öğeleri için yapılır, ancak döngü yalnızca dizi boyutunun yarısına kadar yinelenir. Esasen dizinin zıt uçlarındaki elemanlar değiştirilir. Bu yöntem , 0'dan boyuta giden bir for döngüsü kullanan bir yöntemden iki kat daha hızlı çalışacaktır . Sonuç olarak, dizinin ters sırası elde edilir ve bir dizinin nasıl ters sırada yazdırılacağı gösterilir ve değerler yazdırılır:
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:
  1. ben = 0
  2. list.size() - 1'deki öğeyi kaldır
  3. i = 0'da list.size() - 1 konumunda olan öğeyi ekleyin
  4. artış ben
  5. 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]

Çözüm

Burada bir diziyi tersine çevirmenin 5 farklı yolunu inceledik. Collections çerçevesini kullanan Seçenek 3, Collections.reverse halihazırda var olan, denenmiş ve test edilmiş bir Java işlevi olduğundan muhtemelen kullanılacak en iyi yöntemdir . Tabii ki diğer seçenekler, özellikle öğrenme sırasında kullanılabilir, ancak genellikle yüksek düzeyde optimize edilmiş ve test edilmiş olduklarından, eğer varsalar, genellikle standart yöntemler en iyisidir. Ancak, bu iyi bir kodlama alıştırması olduğundan ve Java Junior için yapacağınız görüşmede başarılı olmanıza yardımcı olacağından, bu tür yöntemleri kendiniz oluşturabilirsiniz.
Yorumlar
  • Popüler
  • Yeni
  • Eskimiş
Yorum bırakmak için giriş yapmalısınız
Bu sayfada henüz yorum yok