HashMap ve LinkedHashMap, Java platformundaki en yaygın ve genel amaçlı Harita uygulamalarından ikisidir. Temelde karma temelli sınıflardır, birbirine oldukça benzerler ve Harita oluşturmak için kullanılırlar. Harita arabirimi, anahtarların benzersiz olduğu bir anahtar-değer ilişkilendirmeleri kümesi tarafından desteklenen işlemleri tanımlayan başlıca Koleksiyon Çerçevesi arabirimlerinin sonuncusudur. Bu Harita uygulamaları bir karma algoritmasına dayanmaktadır. HashMap sınıfı sıralanmamış haritaları uygularken, LinkedHashMap sınıfı sıralı haritaları uygular. LinkedHashMap uygulaması, HashMap sınıfının bir alt sınıfıdır, yani HashMap sınıfının özelliklerini devralır. İkisi arasında performans açısından fazla bir fark yoktur. Hadi bir bakalım.
HashMap, bir karma algoritmasına dayalı olarak Java'daki Harita arayüzünün en yaygın ve dört genel amaçlı uygulamasından biridir. Ayarlanan HashSet sınıfına benzer, ancak öğeler her iki sınıfta da sıralanmamıştır. Bir karma tablosu olarak uygulanır, ancak LinkedHashMap'ten farklı olarak, anahtarlar veya değerler üzerinde herhangi bir düzen sağlamaz. Genel olarak, HashMap put ve get için sabit zamanlı performans sağlar. Sınıf iş parçacığı için güvenli değildir, ancak bir boş anahtar ve birden çok boş değere izin verir. Yinelenen bir sıraya sahip olmadığından daha az bellek gerektirir.
LinkedHashMap, HashMap sınıfının bir alt sınıfı olan Map arabiriminin özelliklerini miras aldığı dört genel amaçlı uygulaması arasındadır. Performans açısından HashMap'e çok benzemesine rağmen, anahtarların Haritaya yerleştirildiği sırayla veya Haritadaki girdilere erişildiği sırada anahtarların ekleme sırasını korur. Yineleyicilerin öğelerini döndürme sırasını garanti ederek üst sınıfının sözleşmesini rafine eder. Ancak, Java'da çift bağlantılı bir liste tuttuğu için bir HashMap'ten daha fazla bellek gerektirir.
HashMap, Java'da Harita arayüzünün karma tabanlı bir uygulamasıdır. Haritalar, anahtar / değer çiftlerinin bir koleksiyonudur ve Listeler sıralı koleksiyondayken kullanılır. HashMap, değeri anahtar / değer çiftlerinde depolayan bir Koleksiyon sınıfıdır. Basit bir ifadeyle, anahtarları değerlerle eşler, yani bir anahtara dayalı bir değer bulabilir. LinkedHashMap, HashMap gibi Harita arabiriminin bağlantılı bir liste uygulamasıdır, ancak içine eklenen öğelerin sırasını korur. Özelliklerini devralan HashMap'in bir alt sınıfıdır. LinkedHashMap, yineleyicilerin öğelerini döndürme sırasını garanti ederek üst sınıf HashMap'in sözleşmesini geliştirir.
HashMap ve LinkedHashMap arasındaki temel fark düzendir. Bir HashMap öğesinin öğeleri sıralı değil, tamamen rastgele iken, LinkedHashMap öğelerinin sıraları sıralanmıştır. LinkedHashMap'in girişleri, anahtarların Haritaya eklenme sırası olan anahtar ekleme sırasındadır. Bu, Haritaya eklenen ilk anahtarın önce numaralandırıldığı, bununla ilişkili değerin ve en son numaralandırılan son girişin de numaralandırıldığı anlamına gelir. LinkedHashMap, tahmin edilebilir bir yineleme sırasına sahiptir, bu da öğelerini erişim sırasına göre koruyabileceği anlamına gelir, bu da girdilere erişildiği sıradır.
HashMap ve LinkedHashMap sınıflarının her ikisi de HashMap bir karma tablosu olarak uygulanırken Java'da Map arabirimini uygulamak için hashing kullanır, buna karşılık LinkedHashMap tüm girişleri üzerinde çalışan çift bağlantılı bir Buckets listesini tutar. Bu nedenle LinkedHashMap, HashMap'ten daha fazla bellek gerektirir, çünkü HashMap'in aksine bir sipariş tutar. TreeMap ile aksi takdirde oluşacak ek maliyeti ödemeden HashMap'in kaotik siparişini kaldırır. Bunun yanı sıra, LinkedHashMap sınıfı eşitleme ve boş anahtarlar / değerler gibi birçok açıdan HashMap sınıfına çok benzemektedir, çünkü her ikisi de bir boş anahtar ve birden çok boş değere izin verir.
Her iki sınıf da karşılaştırılabilir performans sağlamasına rağmen, siparişin bir sorun olmaması durumunda HashMap sınıfının tercih edilen seçenek olduğuna inanılmaktadır, çünkü Haritanın yineleme sırasına ilişkin garanti vermez. Bir anahtara dayalı girdi ekleme, çıkarma veya bulma gibi işlemler, anahtara sahip oldukları için sabit süredir. Bu nedenle, LinkedHashMap'e giriş eklemek, kaldırmak ve bulmak, bir HashMap'e göre biraz daha yavaş olabilir, çünkü Java'da çift bağlantılı bir Kova listesi bulundurur. Ayrıca, hiçbir sipariş korunmadığından HashMap LinkedHashMap'ten daha az bellek gerektirir.
Hem HashMap hem de HashMap sınıfları performans açısından neredeyse benzer olsa da, HashMap bir LinkedHapMap'ten daha az bellek gerektirir, çünkü haritanın yinelenen sırasını garanti etmez, bu da HashMap'e giriş ekleme, kaldırma ve bulma işlemlerini, LinkedHashMap. Bununla birlikte, ikisi arasındaki anahtar fark sırayladır: HashMap öğelerinin düzenleri sıralı değilken, LinkedHashMap öğelerinin öğeleri varsayılan olarak anahtar ekleme sırasındadır, bu da anahtarların haritaya eklenme sırası anlamına gelir. LinkedHashMap öğelerini erişim sırasına göre koruyabilir, bu da girdilere erişildiği sıra anlamına gelir. LinkedHashMap'te olduğu gibi, iki bağlantılı bir liste korunmalıdır, HashMap'ten daha az performansa sahiptir.