Apa perbedaan antara HashMap
, LinkedHashMap
dan TreeMap
di Jawa? Saya tidak melihat perbedaan dalam output karena ketiganya memiliki keySet
dan values
. Apa Hashtable
s?
Map m1 = new HashMap();
m1.put("map", "HashMap");
m1.put("schildt", "java2");
m1.put("mathew", "Hyden");
m1.put("schildt", "java2s");
print(m1.keySet());
print(m1.values());
SortedMap sm = new TreeMap();
sm.put("map", "TreeMap");
sm.put("schildt", "java2");
sm.put("mathew", "Hyden");
sm.put("schildt", "java2s");
print(sm.keySet());
print(sm.values());
LinkedHashMap lm = new LinkedHashMap();
lm.put("map", "LinkedHashMap");
lm.put("schildt", "java2");
lm.put("mathew", "Hyden");
lm.put("schildt", "java2s");
print(lm.keySet());
print(lm.values());
Hashtable
danHashMap
adalah bahwa dalam Hashtable, "baik kunci maupun nilainya tidak boleh nol". Batasan ini tidak ada pada yang terakhir.Saya lebih suka presentasi visual:
sumber
Ketiganya mewakili pemetaan dari kunci unik hingga nilai, dan karenanya mengimplementasikan antarmuka Peta .
HashMap adalah peta berdasarkan hashing dari kunci. Ini mendukung O (1) mendapatkan / menempatkan operasi. Kunci harus memiliki implementasi yang konsisten
hashCode()
danequals()
agar ini berfungsi.LinkedHashMap sangat mirip dengan HashMap, tetapi menambah kesadaran pada urutan item ditambahkan (atau diakses), sehingga urutan iterasi sama dengan urutan penyisipan (atau urutan akses, tergantung pada parameter konstruksi).
TreeMap adalah pemetaan berbasis pohon. Operasi put / get-nya membutuhkan waktu O (log n). Dibutuhkan item untuk memiliki beberapa mekanisme perbandingan, baik dengan Sebanding atau Pembanding. Urutan iterasi ditentukan oleh mekanisme ini.
sumber
LinkedHashMap
akan beralih di urutan penyisipan, bukan urutan alami. Jadi, jika Anda menambahkan(2,5,3)
keLinkedHashMap
dan melakukan untuk setiap di atasnya, itu akan kembali2,5,3
. Jika2,5,3
ke aTreeMap
itu akan kembali2,3,5
.Lihat di mana setiap kelas berada dalam hierarki kelas dalam diagram berikut ( lebih besar ). TreeMap mengimplementasikan
SortedMap
danNavigableMap
sementaraHashMap
tidak.HashTable
sudah usang danConcurrentHashMap
kelas yang sesuai harus digunakan.sumber
HashMap
HashTable
LinkedHashMap
TreeMap
sumber
Hanya beberapa masukan lagi dari pengalaman saya sendiri dengan peta, kapan saya akan menggunakan masing-masing:
removeEldestEntry()
metode. Ini memungkinkan Anda membuat objek Cache yang dapat kedaluwarsa menggunakan beberapa kriteria yang Anda tentukan.sumber
Ketiga kelas
HashMap
,TreeMap
danLinkedHashMap
mengimplementasikanjava.util.Map
antarmuka, dan mewakili pemetaan dari kunci unik ke nilai.HashMap
A
HashMap
berisi nilai-nilai berdasarkan kunci.Ini hanya mengandung elemen unik.
Mungkin memiliki satu kunci nol dan beberapa nilai nol.
Tidak mempertahankan pesanan .
public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable
LinkedHashMap
LinkedHashMap
berisi nilai-nilai berdasarkan kunci.Ini sama dengan HashMap sebagai gantinya mempertahankan urutan penyisipan . // Lihat deselerasi kelas di bawah
public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>
TreeMap
TreeMap
berisi nilai-nilai berdasarkan kunci. Ini mengimplementasikan antarmuka NavigableMap dan memperluas kelas AbstractMap.Ini sama dengan
HashMap
sebaliknya mempertahankan urutan naik (Diurutkan menggunakan urutan alami kuncinya.).public class TreeMap<K,V> extends AbstractMap<K,V> implements NavigableMap<K,V>, Cloneable, Serializable
Hashtable
Ini adalah kelas warisan.
public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, Serializable
Ref: http://javarevisited.blogspot.in/2015/08/difference-between-HashMap-vs-TreeMap-vs-LinkedHashMap-Java.html
sumber
Lihatlah bagaimana kinerja bervariasi.
Tree tree yang merupakan implementasi dari Sorted map. Kompleksitas operasi put, get, dan containKey adalah O (log n) karena pemesanan Natural
sumber
@Amit:
SortedMap
adalah antarmuka sedangkanTreeMap
kelas yang mengimplementasikanSortedMap
antarmuka. Itu berarti jika mengikuti protokol yangSortedMap
meminta pelaksana untuk melakukannya. Sebuah pohon kecuali diimplementasikan sebagai pohon pencarian, tidak dapat memberi Anda data yang diurutkan karena pohon dapat berupa jenis pohon apa pun. Jadi untuk membuat TreeMap berfungsi seperti urutan Diurutkan, itu mengimplementasikan SortedMap (misalnya, Binary Search Tree - BST, BST seimbang seperti AVL dan RB Tree, bahkan Pohon Pencarianary - kebanyakan digunakan untuk pencarian berulang dengan cara yang dipesan).Dalam NUT-SHELL
HashMap
: memberikan data dalam O (1), tanpa pemesananTreeMap
: memberikan data dalam O (log N), basis 2. dengan kunci yang dipesanLinkedHashMap
: adalah tabel Hash dengan daftar tertaut (pikirkan indeks-SkipList) kemampuan untuk menyimpan data dengan cara itu dimasukkan ke dalam pohon. Paling cocok untuk menerapkan LRU (paling baru digunakan).sumber
Berikut ini adalah perbedaan utama antara HashMap dan TreeMap
HashMap tidak mempertahankan pesanan apa pun. Dengan kata lain, HashMap tidak memberikan jaminan bahwa elemen yang dimasukkan terlebih dahulu akan dicetak terlebih dahulu, sedangkan Sama seperti TreeSet, elemen TreeMap juga diurutkan sesuai dengan urutan alami dari elemen-elemennya.
Implementasi HashMap internal menggunakan Hashing dan TreeMap secara internal menggunakan implementasi Red-Black tree.
HashMap dapat menyimpan satu kunci nol dan banyak nilai null. MapMap tidak dapat berisi kunci nol tetapi mungkin mengandung banyak nilai null.
HashMap mengambil kinerja waktu yang konstan untuk operasi dasar seperti get and put yaitu O (1). Menurut Oracle docs, TreeMap menyediakan jaminan log (n) biaya waktu untuk metode get and put.
HashMap jauh lebih cepat daripada TreeMap, karena waktu kinerja HashMap konstan terhadap waktu log TreeMap untuk sebagian besar operasi.
HashMap menggunakan metode equals () sebagai perbandingan sementara TreeMap menggunakan metode compareTo () untuk mempertahankan pemesanan.
HashMap mengimplementasikan antarmuka Peta sementara TreeMap mengimplementasikan antarmuka NavigableMap.
sumber
Ini adalah implementasi yang berbeda dari antarmuka yang sama. Setiap implementasi memiliki beberapa kelebihan dan beberapa kelemahan (insert cepat, pencarian lambat) atau sebaliknya.
Untuk detail, lihat javadoc TreeMap , HashMap , LinkedHashMap .
sumber
Peta hash tidak mempertahankan urutan penyisipan.
Contoh. Hashmap Jika Anda memasukkan kunci sebagai
Itu bisa menyimpannya sebagai
Linked Hashmap mempertahankan urutan penyisipan.
Contoh.
Jika Anda memasukkan kunci
Ini akan menyimpannya sebagai
sama seperti yang kita masukkan.
Peta pohon menyimpan katup dalam Meningkatkan Urutan Kunci. Contoh.
Jika Anda memasukkan kunci
Ini akan menyimpannya sebagai
sumber
HashMap:
LinkedHashMap:
TreeMap:
sumber
Semua menawarkan kunci-> peta nilai dan cara untuk beralih melalui kunci. Perbedaan paling penting antara kelas-kelas ini adalah jaminan waktu dan pemesanan kunci.
Bayangkan Anda melewati TreeMap, HashMap, dan LinkedHashMap kosong ke dalam fungsi berikut:
Output untuk masing-masing akan terlihat seperti hasil di bawah ini.
Untuk HashMap, hasilnya adalah, dalam pengujian saya sendiri, {0, 1, -1}, tetapi bisa berupa pemesanan apa pun. Tidak ada jaminan pemesanan.
Treemap, outputnya adalah, {-1, 0, 1}
LinkedList, outputnya adalah, {1, -1, 0}
sumber
Meskipun ada banyak Jawaban yang sangat bagus di sini, saya ingin menyajikan meja saya sendiri yang menjelaskan berbagai
Map
implementasi yang dibundel dengan Java 11.Kita dapat melihat perbedaan-perbedaan ini tercantum pada grafik tabel:
HashMap
adalah tujuanMap
umum yang umum digunakan ketika Anda tidak memiliki kebutuhan khusus.LinkedHashMap
meluasHashMap
, menambahkan perilaku ini: Mempertahankan pesanan, urutan entri awalnya ditambahkan . Mengubah nilai untuk entri nilai kunci tidak mengubah tempatnya dalam urutan.TreeMap
juga mempertahankan pesanan, tetapi menggunakan salah satu (a) urutan "alami" , yang berarti nilai daricompareTo
metode pada objek kunci yang didefinisikan padaComparable
interface, atau (b) memanggil sebuahComparator
implementasi yang Anda berikan.TreeMap
mengimplementasikan keduaSortedMap
antarmuka, dan penggantinya,NavigableMap
antarmuka.TreeMap
tidak tidak memungkinkan NULL sebagai kunci , sementaraHashMap
&LinkedHashMap
lakukan.HashTable
adalah warisan , dari Jawa 1 . Disuplai olehConcurrentHashMap
kelas. Mengutip Javadoc:ConcurrentHashMap
mematuhi spesifikasi fungsional yang sama denganHashtable
, dan termasuk versi metode yang sesuai dengan masing-masing metodeHashtable
.sumber
HashMap
dapat berisi satu kunci nol.
HashMap tidak melakukan pemesanan.
TreeMap
TreeMap tidak dapat berisi kunci null.
TreeMap mempertahankan urutan naik.
LinkedHashMap
LinkedHashMap dapat digunakan untuk mempertahankan urutan penyisipan, di mana kunci dimasukkan ke dalam Peta atau juga dapat digunakan untuk mempertahankan urutan akses, di mana kunci diakses.
Contohnya ::
1) Peta HashMap = HashMap baru ();
2) Peta TreeMap = TreeMap baru ();
3) LinkedHashMap map = new LinkedHashMap ();
sumber
Yang paling penting di antara ketiganya adalah bagaimana mereka menyimpan urutan entri.
HashMap
- Tidak menyimpan urutan entri. misalnya.LinkedHashMap
: Ini menyimpan urutan entri dibuat. misalnya:TreeMap
: Ini menyimpan entri dalam urutan tombol. misalnya:sumber