Java’da HashMap Değerine Göre Sıralama Rehberi: En Etkili Yöntemler 💻
🚀 Bu Rehberde Ne Öğreneceksiniz?
Bu yazıda, Java’da HashMap değerine göre sıralama işlemini öğreneceksiniz.
Farklı veri tiplerinde (String, Integer, özel sınıflar) değerleri nasıl sıralayabileceğinizi görecek ve
modern yöntemlerle (Comparator, Stream API) nasıl verimli sonuçlar alabileceğinizi adım adım uygulayacaksınız.
🧠 Konunun Özeti
Ana Teknik Konu: HashMap değerlerine göre sıralama yapmak.
Çözülen Problem: HashMap yapısı sıralı değildir. Değere göre düzenli veri çıktısı gerektiğinde bu yöntemler kullanılır.
Temel Adımlar:
- Değerleri bir
Listiçine aktarmak - Listeyi
Collections.sort()veya özelComparatorile sıralamak - Sıralı verilerle yeni bir
LinkedHashMapoluşturmak
🔍 Adım Adım HashMap Değerine Göre Sıralama
HashMap, Java'da anahtar-değer yapısında verileri tutar ancak doğal bir sıralama sağlamaz.
Bu yüzden verileri değerlere göre sıralamak için birkaç farklı yöntem uygulanır.
1️⃣ String Değerlerini Sıralama
Bu örnekte HashMap’teki değerler String tipindedir.
Adım 1: Tüm değerleri bir ArrayList içine aktarın.
Adım 2: Collections.sort() metoduyla alfabetik sıralama yapın.
Adım 3: Yeni bir LinkedHashMap oluşturarak sıralı değerleri ekleyin.
// String tipindeki listeyi özel karşılaştırıcıyla alfabetik sıralar
Collections.sort(list, new Comparator<String>() {
public int compare(String str, String str1) {
return str.compareTo(str1);
}
});
Tam uygulama örneği:
package rabisu.cloud.veri;
import java.util.*;
public class SiralamaOrnegi {
public static void main(String[] args) {
HashMap<String, String> harita = new HashMap<>();
LinkedHashMap<String, String> siraliHarita = new LinkedHashMap<>();
ArrayList<String> liste = new ArrayList<>();
harita.put("tr1-node01", "Baskent");
harita.put("tr1-node02", "Ankara");
harita.put("tr1-node03", "Denizli");
harita.put("tr1-node04", "Trabzon");
harita.put("tr1-node05", "Istanbul");
for (Map.Entry<String, String> girdi : harita.entrySet()) {
liste.add(girdi.getValue());
}
Collections.sort(liste, new Comparator<String>() {
public int compare(String str, String str1) {
return str.compareTo(str1);
}
});
for (String str : liste) {
for (Map.Entry<String, String> girdi : harita.entrySet()) {
if (girdi.getValue().equals(str)) {
siraliHarita.put(girdi.getKey(), str);
}
}
}
System.out.println(siraliHarita);
}
}
Çıktı:
{tr1-node02=Ankara, tr1-node01=Baskent, tr1-node03=Denizli, tr1-node05=Istanbul, tr1-node04=Trabzon}
2️⃣ Integer Değerlerini Sıralama
Integer değerler için özel bir karşılaştırıcıya gerek yoktur. Collections.sort() doğal sıralamayı otomatik yapar.
// Integer değerleri küçükten büyüğe sıralar
Collections.sort(liste);
Sonrasında aynı şekilde LinkedHashMap oluşturularak sonuç elde edilir.
3️⃣ Özel Nesneleri (Custom Object) Sıralama
Özel sınıflar (örnek: Kullanici) için modern bir çözüm olarak Stream API + Comparator kullanabilirsiniz.
// Kullanici sınıfı
package rabisu.cloud.veri;
public class Kullanici {
String ad;
String soyad;
Kullanici(String a, String b){
ad = a;
soyad = b;
}
public String getAd() {
return ad;
}
}
// Kullanıcıları 'ad' alanına göre sıralar
Comparator<Kullanici> adaGore = (Kullanici o1, Kullanici o2) ->
o1.getAd().compareTo(o2.getAd());
Stream API ile doğrudan sıralama:
HashMap<Integer, Kullanici> hmap = new HashMap<>();
hmap.put(9, new Kullanici("Ayse", "Yilmaz"));
hmap.put(1, new Kullanici("Burak", "Kaya"));
hmap.put(6, new Kullanici("Cem", "Demir"));
LinkedHashMap<Integer, Kullanici> sirali = hmap.entrySet().stream()
.sorted(Map.Entry.<Integer, Kullanici>comparingByValue(adaGore))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
(e1, e2) -> e1, LinkedHashMap::new));
Çıktı:
9: Ayse Yilmaz
1: Burak Kaya
6: Cem Demir
💬 Sıkça Sorulan Sorular (SSS)
- Neden LinkedHashMap kullanıyoruz?
HashMap sıralamayı korumaz. LinkedHashMap, sıralanmış verilerin eklenme sırasını korur.
- Anahtar sıralaması değişir mi?
Evet, değerler baz alınarak yeni sıra oluşturulur. Orijinal anahtar sırası değişir.
- Ters (büyükten küçüğe) sıralama nasıl yapılır?
Collections.sort(liste, Collections.reverseOrder()); veya obj2.compareTo(obj1) kullanılabilir.
- Bu yöntem hangi Java sürümleriyle uyumlu?
Klasik Collections.sort() tüm sürümlerde çalışır. Stream API için Java 8+ gerekir.
- Anahtar ve değer aynı tipteyse ne yapılır?
String tipi değerler için Comparator ile sıralama yapılır.
🧩 Sonuç
Bu rehber, Java’da HashMap değerlerini sıralamanın farklı yollarını gösterdi. Basit veri tipleri için Collections.sort(), özel nesneler için Comparator + Stream API kombinasyonu en etkili çözümdür.
Bu yöntemleri kendi projelerinde veya Rabisu Bulut platformundaki uygulamalarında hemen deneyebilirsin. ☁️