Java Programming

Java’da Verimli Çoklu Küme Uygulamaları

Spread the love

Çoklu küme, aynı zamanda bir torba olarak da bilinen, aynı öğenin birden fazla örneğine izin veren bir koleksiyondur. Her öğenin benzersiz olduğu kümelerin aksine, çoklu kümeler çoğaltmaları içerebilir. Java’nın standart kitaplığı doğrudan bir çoklu küme uygulaması sunmasa da, bu işlevi verimli bir şekilde elde etmek için çeşitli yaklaşımlar kullanılabilir.

İçindekiler Tablosu

Java’da Çoklu Kümeler Uygulama

Java’da bir çoklu küme oluşturmak için çeşitli yöntemler vardır. En uygun seçim, belirli ihtiyaçlarınıza ve önceliklerinize bağlıdır:

  1. HashMap kullanma: Bu, basit bir yaklaşımdır. Bir HashMap, her öğeyi sayısına eşler. Bir öğe eklemek sayısını artırır; bir öğeyi kaldırmak sayısını azaltır (sıfır sayıları uygun şekilde ele alınır).
  2. TreeMap kullanma: HashMap‘e benzer, ancak TreeMap doğal sıralamaya veya özel bir Comparator‘a göre sıralı sırayı korur. Öğe sırası önemli olduğunda kullanışlıdır.
  3. Guava’nın Multiset‘ini kullanma: Guava kitaplığı sağlam, optimize edilmiş bir Multiset uygulaması sağlar. Bu, kolaylığı ve verimliliği nedeniyle genellikle tercih edilen yöntemdir.
  4. Özel Bir Sınıf Oluşturma: Karmaşık senaryolar veya benzersiz gereksinimler için özel bir sınıf maksimum esneklik sunar, ancak daha fazla geliştirme çabası gerektirir.

HashMap Uygulama Örneği

İşte HashMap kullanarak temel bir çoklu küme uygulaması:


import java.util.HashMap;
import java.util.Map;

public class MultisetHashMap {
    private Map<String, Integer> elements;

    public MultisetHashMap() {
        elements = new HashMap<>();
    }

    public void add(String element) {
        elements.put(element, elements.getOrDefault(element, 0) + 1);
    }

    public void remove(String element) {
        if (elements.containsKey(element)) {
            int count = elements.get(element);
            if (count > 1) {
                elements.put(element, count - 1);
            } else {
                elements.remove(element);
            }
        }
    }

    public int getCount(String element) {
        return elements.getOrDefault(element, 0);
    }

    public static void main(String[] args) {
        MultisetHashMap multiset = new MultisetHashMap();
        multiset.add("apple");
        multiset.add("banana");
        multiset.add("apple");
        multiset.add("apple");
        System.out.println("Elma sayısı: " + multiset.getCount("apple")); // Çıktı: 3
        multiset.remove("apple");
        System.out.println("Kaldırmadan sonra elma sayısı: " + multiset.getCount("apple")); // Çıktı: 2
    }
}

Guava’nın Çoklu Kümesini Kullanma

Guava’nın Multiset‘i daha temiz ve daha verimli bir çözüm sunar:


import com.google.common.collect.HashMultiset;
import com.google.common.collect.Multiset;

public class MultisetGuava {
    public static void main(String[] args) {
        Multiset<String> multiset = HashMultiset.create();
        multiset.add("apple");
        multiset.add("banana");
        multiset.add("apple");
        multiset.add("apple");
        System.out.println("Elma sayısı: " + multiset.count("apple")); // Çıktı: 3
        multiset.remove("apple");
        System.out.println("Kaldırmadan sonra elma sayısı: " + multiset.count("apple")); // Çıktı: 2
        System.out.println("Çoklu kümenin boyutu: " + multiset.size()); //Çıktı: 3

        for(String element : multiset){
            System.out.println("Öğe: " + element + ", Sayı: " + multiset.count(element));
        }
    }
}

Projenizin yapı dosyasına Guava bağımlılığını eklemeyi unutmayın.

Doğru Yaklaşımı Seçme

Çoğu uygulama için, Guava’nın Multiset‘i sağlamlığı ve verimliliği nedeniyle önerilir. HashMap yaklaşımı, Guava’nın ek özelliklerine ihtiyacınız olmayan daha basit senaryolar için uygundur. Özel bir sınıf yalnızca son derece özel durumlarda gereklidir.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir