Ç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
- HashMap Uygulama Örneği
- Guava’nın Çoklu Kümesini Kullanma
- Doğru Yaklaşımı Seçme
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:
HashMap
kullanma: Bu, basit bir yaklaşımdır. BirHashMap
, 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).TreeMap
kullanma:HashMap
‘e benzer, ancakTreeMap
doğal sıralamaya veya özel birComparator
‘a göre sıralı sırayı korur. Öğe sırası önemli olduğunda kullanışlıdır.- Guava’nın
Multiset
‘ini kullanma: Guava kitaplığı sağlam, optimize edilmiş birMultiset
uygulaması sağlar. Bu, kolaylığı ve verimliliği nedeniyle genellikle tercih edilen yöntemdir. - Ö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.