Dizinin Simetrik Olup Olmadığını Bulma Java – Java programlama dilini öğrenirken veya üniversitedeki programlama vizelerine hazırlanırken karşımıza çıkan en klasik ve öğretici sorulardan biri şudur: Bir dizinin simetrik olup olmadığını nasıl buluruz? Bu yazımızda, dizilerin (array) derinliklerine inecek, simetrik (diğer adıyla palindrom) dizi kavramını anlayacak ve bu problemi çözmek için gereken algoritmayı adım adım inşa edeceğiz. Üstelik hocaların sınavlarda özellikle belirttiği bir kurala uyacağız: Hiçbir hazır metot kullanmadan! Programlama temellerini sağlamlaştırmak ve algoritmik düşünme becerisini geliştirmek için hazır fonksiyonlardan kaçınmak her zaman en iyi yoldur.
Simetrik (Palindrom) Dizi Nedir?
Dizinin Simetrik Olup Olmadığını Bulma Java

Simetrik dizi, baştan sona doğru okunuşu ile sondan başa doğru okunuşu aynı olan dizilere verilen isimdir. Tıpkı “kavak” veya “ece” kelimelerinde olduğu gibi, sayılardan veya karakterlerden oluşan diziler de simetrik olabilir.
Örnek bir simetrik dizi (Tek elemanlı): {1, 2, 3, 2, 1} Bu diziyi soldan sağa okuduğunuzda da, sağdan sola okuduğunuzda da aynı eleman sırasıyla karşılaşırsınız.
Örnek bir simetrik dizi (Çift elemanlı): {5, 8, 8, 5}
Simetrik olmayan dizi örneği: {1, 2, 3, 4, 5} Bu dizinin tersi {5, 4, 3, 2, 1} olduğu için simetrik değildir.
Neden Hazır Metot Kullanmıyoruz?
Dizinin Simetrik Olup Olmadığını Bulma Java
Java, Collections sınıfı veya Arrays sınıfı içerisinde dizileri tersine çevirmek veya kopyalamak için birçok hazır fonksiyon sunar. Ancak bir bilgisayar mühendisliği öğrencisi olarak temel amacımız sadece sonuca ulaşmak değil, o sonuca giden yolu tasarlamaktır. Hazır bir fonksiyon kullandığımızda arka planda ne kadar bellek harcandığını veya işlemcinin ne kadar yorulduğunu göremeyiz. Ayrıca okul sınavlarında hocalar, öğrencinin döngüleri ve dizi indekslerini ne kadar iyi kavradığını ölçmek için hazır metot kullanımını yasaklar. Bu yüzden kendi kontrol algoritmamızı, en optimize şekilde sıfırdan yazacağız.
Algoritma Mantığı: Çift İşaretçi (Two-Pointer) Yaklaşımı
Dizinin Simetrik Olup Olmadığını Bulma Java
Bir dizinin simetrik olup olmadığını anlamanın en performanslı yolu “çift işaretçi” (two-pointer) algoritmasıdır. Algoritmanın adımları şu şekildedir:
- Dizinin en başındaki eleman (0. indeks) ile en sonundaki elemanı (uzunluk – 1. indeks) karşılaştır.
- Eğer bu iki eleman birbirine eşitse, baştaki işaretçiyi bir sağa, sondaki işaretçiyi bir sola kaydır.
- Yeni elemanları karşılaştır.
- Bu işlem, dizinin ortasına gelene kadar devam eder.
- Eğer herhangi bir noktada elemanlar eşleşmezse, döngüyü kır ve dizinin “simetrik olmadığını” söyle.
- Döngü hiçbir pürüze takılmadan ortada buluşursa, dizi kesinlikle “simetriktir”.
Buradaki en önemli optimizasyon detayı, döngünün dizinin tam sonuna kadar dönmesine gerek olmamasıdır. Dizinin yarısına kadar (n / 2) gitmemiz, kontrolü tamamlamamız için yeterlidir. Bu sayede kodumuz iki kat daha hızlı çalışır.
Dizinin Simetrik Olup Olmadığını Bulan Java Kodu
Dizinin Simetrik Olup Olmadığını Bulma Java
Aşağıdaki Java kodunu inceleyerek yukarıda anlattığımız algoritmanın koda nasıl döküldüğünü görebilirsiniz:
Java
public class SimetrikDiziKontrolu {
// Simetrik kontrolü yapan ve boolean dönen metodumuz
public static boolean isSymmetric(int[] arr) {
int n = arr.length; // Dizinin uzunluğunu alıyoruz
// Sadece dizinin yarısına kadar dönmemiz yeterli
for (int i = 0; i < n / 2; i++) {
// Baştan i. eleman ile sondan i. elemanı karşılaştırıyoruz
// n - 1 dizinin son indeksidir. "n - 1 - i" ise sondan geriye doğru gelmemizi sağlar.
if (arr[i] != arr[n - 1 - i]) {
return false; // Eşleşmeyen tek bir eleman bile varsa, simetrik değildir.
}
}
return true; // Döngü sorunsuz bittiyse dizi simetriktir.
}
public static void main(String[] args) {
// Test için farklı diziler oluşturuyoruz
int[] dizi1 = {1, 2, 3, 2, 1}; // Tek uzunluklu simetrik dizi
int[] dizi2 = {4, 5, 5, 4}; // Çift uzunluklu simetrik dizi
int[] dizi3 = {1, 2, 3, 4, 5}; // Simetrik olmayan dizi
// Sonuçları ekrana yazdırıyoruz
System.out.println("Dizi 1 simetrik mi? : " + isSymmetric(dizi1));
System.out.println("Dizi 2 simetrik mi? : " + isSymmetric(dizi2));
System.out.println("Dizi 3 simetrik mi? : " + isSymmetric(dizi3));
}
}
Kodun Adım Adım Analizi (Dry Run)

Dizinin Simetrik Olup Olmadığını Bulma Java
Diyelim ki dizi1 = {1, 2, 3, 2, 1} dizisini fonksiyona gönderdik. Dizinin uzunluğu (n) 5’tir.
- Döngü Başlangıcı: Döngü sınırımız
5 / 2 = 2(Tam sayı bölmesi olduğu için). Yani döngüi=0vei=1için çalışacak. - Adım 1 (i = 0):
arr[0](değeri 1) ilearr[5 - 1 - 0]yaniarr[4](değeri 1) karşılaştırılır.1 != 1yanlış olduğu için if bloğuna girilmez. - Adım 2 (i = 1):
arr[1](değeri 2) ilearr[5 - 1 - 1]yaniarr[3](değeri 2) karşılaştırılır.2 != 2yanlış olduğu için if bloğuna girilmez. - Sonuç: Döngü biter ve
return true;çalışır. Dizi simetriktir.
Zaman ve Alan Karmaşıklığı (Time & Space Complexity)

Mühendislik okuyorsanız veya teknik mülakatlara hazırlanıyorsanız, yazdığınız kodun karmaşıklığını bilmeniz şarttır.
- Zaman Karmaşıklığı (Time Complexity): O(N/2) basitleştirilmiş haliyle O(N)‘dir. Dizinin eleman sayısının yarısı kadar işlem yaparız. Döngü içinde ekstra bir döngü olmadığı için oldukça performanslıdır.
- Alan Karmaşıklığı (Space Complexity): O(1). Yani sabit alan. Mevcut dizi üzerinde sadece bir
ideğişkeni tutarak işlem yaptık, hafızada yeni bir dizi veya ekstra bir veri yapısı oluşturmadık. Bu da bellek dostu bir algoritma yazdığımızın kanıtıdır.
Sık Yapılan Hatalar ve Dikkat Edilmesi Gerekenler
Bu algoritmayı yazarken öğrencilerin en çok yaptığı hatalardan bazıları şunlardır:
- Döngüyü N’e Kadar Döndürmek: Döngüyü
i < nşeklinde dizinin sonuna kadar döndürürseniz, elemanları iki kere kontrol etmiş olursunuz (örneğin başla sonu kontrol ettikten sonra, ilerleyen adımlarda sonla başı tekrar kontrol edersiniz). Bu, hata vermese de performansı düşürür ve gereksiz işlem yaratır. - İndeks Sınırı Aşımı (ArrayIndexOutOfBoundsException): Sondaki elemana ulaşırken
n - iyazmak yapılan en büyük hatadır. Diziler 0. indeksten başladığı için son eleman her zamann - 1‘dir. Bu yüzden formülümüz kesinliklen - 1 - iolmalıdır. - Referans Karşılaştırması: Eğer diziniz
int[]gibi primitive (ilkel) tiplerden değil de,String[]veyaInteger[]gibi nesnelerden oluşuyorsa,!=veya==operatörleri yerine.equals()metodunu kullanmanız gerekir. Aksi takdirde içerik yerine bellek adreslerini karşılaştırmış olursunuz.
Diğer Veri Tipleri İçin Uygulama
Aynı mantığı bir kelimenin (String) palindrom olup olmadığını bulmak için de kullanabilirsiniz. Kelimeyi bir karakter dizisine (char[]) dönüştürüp, aynı indeks formülüyle baştan ve sondan karşılaştırma yapmanız yeterlidir. Algoritmanın temeli her zaman aynıdır; veriyi uçlardan merkeze doğru daraltarak taramak.
Konu hakkında daha temel kavramlara göz atmak isterseniz ve diziler (arrays) hakkında dünya standartlarında dokümantasyon okumak isterseniz, Oracle’ın Resmi Java Diziler Dokümantasyonunu incelemenizi şiddetle tavsiye ederim. İngilizce kaynak okumak, bir yazılımcının gelişimi için en kritik adımdır.

Sonuç
Bu makalede, Java’da bir dizinin simetrik olup olmadığını anlamak için nasıl bir algoritma kurmanız gerektiğini detaylıca inceledik. Hazır metotlara bağımlı kalmadan kendi çözümümüzü ürettik, zaman karmaşıklığını analiz ettik ve sınavlarda puan kaybettiren ufak detaylara değindik. Özellikle sınav kağıdında veya laboratuvar mülakatlarında bu tarz bir O(N) çözümü yazmanız, algoritma temellerinizin ne kadar sağlam olduğunu gösterecektir.
Kodları kendi IDE’nizde (Eclipse, IntelliJ veya NetBeans) yazarak denemeyi ve dizinin içindeki değerleri değiştirerek farklı senaryoları test etmeyi unutmayın. Pratik yapmak, bu işin en büyük sırrıdır.
Daha fazla bilgiye ulaşmak için sitemizi ziyaret etmeyi unutmayın !
Java Algoritma Örnekleri: Dizideki En Büyük Elemanı Bulma haberimizin detayları için tıklayın !


