5.00 / 1 oy

Java'da dizileri (vektörleri) karşılaştırmak

Java'da diziler (vektörler) konusunda çok sayıda örnek paylaşmıştım. Mesela iki dizideki ortak elemanları bulan Java programı örneğinde iki adet dizinin tüm elemanlarını teker teker karşılaştırarak kaç adet elemanın aynı olduğunu bulmuştuk. Bugün ise ik diizinin aynı olup olmadığını (tüm elemanlarının aynı olup olmadığını) kontrol eden bir uygulama yapacağız. Uzun uzun kodlayacak olsaydık önce eleman sayılarının aynı olduğunu kontrol eder, sonra her iki vektörü de sıraya sokarak tüm karşılık gelen elemanların aynı olup olmadıklarını tek bir döngü içinde kontrol ederdik, ama Arrays sınıfında dizilerin aynı olup olmadıklarını kontrol eden bir metod zaten olduğu için bu işlemi manuel yapmamıza gerek kalmıyor: Arrays.equals(dizi1, dizi2)

Örnek: 3 adet dizi tanımlayalım ve bu dizilerden hangilerinin birbiriyle aynı olduklarını kontrol edelim.

int[] dizi1 = new int [] {10, 15, 20, 25}; 
int[] dizi2 = new int [] {10, 15, 20, 30}; 
int[] dizi3 = new int [] {10, 15, 20, 25}; 
  
if (Arrays.equals(dizi1, dizi2))
	System.out.println("dizi 1 ile dizi 2 aynıdır");

if (Arrays.equals(dizi1, dizi3))
	System.out.println("dizi 1 ile dizi 3 aynıdır");

if (Arrays.equals(dizi2, dizi3))
	System.out.println("dizi 2 ile dizi 3 aynıdır");

Çıktı:

dizi 1 ile dizi 3 aynıdır

Java ne akıllı program değil mi, iki diziyi verir vermez aynı olup olmadıklarını şakkadanak çözdü. Şimdi bir de dizi elemanlarının yerlrini değiştirerek bakalım Java gerçekten de o kadar akıllı mı.

Örnek 2:

int[] dizi1 = new int [] {10, 15, 25, 20}; 
int[] dizi2 = new int [] {10, 15, 20, 25}; 

if (Arrays.equals(dizi1, dizi2))
	System.out.println("dizi 1 ile dizi 2 aynıdır");
else
	System.out.println("dizi 1 ile dizi 2 aynı değildir");

Çıktı:

dizi 1 ile dizi 2 aynı değildir

Demek ki Java maalesef o kadar da akıllı değilmiş, sırası değiştirilmiş 2 adet dizi elemanını gözden kaçırdı. Peki sıralayarak tekrar denesek problem çözülür mü?

Örnek 3:

int[] dizi1 = new int [] {10, 15, 25, 20}; 
int[] dizi2 = new int [] {10, 15, 20, 25}; 

Arrays.parallelSort(dizi1);
Arrays.parallelSort(dizi2);
  
if (Arrays.equals(dizi1, dizi2))
	System.out.println("sıralanmış dizi 1 ile sıralanmış dizi 2 aynıdır");
else
	System.out.println("dizi 1 ile dizi 2 aynı değildir");

Çıktı:

sıralanmış dizi 1 ile sıralanmış dizi 2 aynıdır

Sıralamayı yapınca nasıl da hemen aybı olduklarını fark etti değil mi :) Peki acaba biz bir hata yapıyor olabilir miyiz? Ya Arrays.equals iki dizinin eleman sırasına kadar aynı olup olmadığını kontrol eden metodsa? O zaman farklı sıradaki dizilerin de elemanlarının aynı olup olmadığını kontrol eden bir metod olmalı değil mi? Açıkçası diziler maalesef metodlar açısından o kadar zengin değiller. Bu gibi işlemler için ArrayList kullanmak daha mantıklı oluyor. Bu arada Java'da sıralanmamış ArrayList'lerin karşılaştırılması ile ilgili de bir metod var: ArrayList.containsAll() matodu.

 

utku33

09.02.2020 00:37

Bu soru henüz yanıtlanmamış.

Bu soruya sadece kayıtlı kullanıcılar yanıt yazabilirler. Yanıt yazmak için lütfen giriş yapınız.

Reitix
Java'da dizileri (vektörleri) karşılaştırmak

İnternet sitemizdeki deneyiminizi iyileştirmek için çerezler kullanıyoruz. Bu siteye giriş yaparak çerez kullanımını kabul etmiş sayılıyorsunuz. Daha fazla bilgi.