Terlepas dari kenyataan yang HashSet
tidak memungkinkan nilai duplikat, apa perbedaan antara HashMap
dan HashSet
?
Maksud saya implementasi bijak? Ini agak kabur karena keduanya menggunakan tabel hash untuk menyimpan nilai.
java
collections
hashmap
hashset
SpikETidE
sumber
sumber
Jawaban:
Mereka adalah konstruksi yang sama sekali berbeda. A
HashMap
adalah implementasi dariMap
. Sebuah Peta peta kunci untuk nilai-nilai. Pencarian kunci terjadi menggunakan hash.Di sisi lain, a
HashSet
adalah implementasi dariSet
. Sebuah Set dirancang agar sesuai dengan model matematika dari suatu himpunan. AHashSet
memang menggunakan aHashMap
untuk mendukung implementasinya, seperti yang Anda catat. Namun, ini mengimplementasikan antarmuka yang sama sekali berbeda.Ketika Anda mencari yang terbaik
Collection
untuk tujuan Anda, Tutorial ini adalah tempat awal yang baik. Jika Anda benar-benar ingin tahu apa yang sedang terjadi, ada buku untuk itu juga.sumber
HashSet adalah himpunan , misalnya {1,2,3,4,5}
HashMap adalah peta kunci -> nilai (kunci ke nilai), misalnya {a -> 1, b -> 2, c -> 2, d -> 1}
Perhatikan dalam contoh saya di atas bahwa dalam HashMap tidak boleh ada kunci duplikat, tetapi mungkin memiliki nilai duplikat.
Di HashSet, tidak boleh ada elemen duplikat.
sumber
HashSet
HashSet tidak disinkronkan yang artinya tidak cocok untuk operasi yang aman sebelum kecuali disinkronkan secara eksplisit. [Kesamaan]
HashMap
HashMap tidak disinkronkan yang artinya tidak cocok untuk operasi yang aman sebelum kecuali disinkronkan secara eksplisit. [Kesamaan]
Silakan merujuk artikel ini untuk menemukan informasi lebih lanjut.
sumber
Sangat memalukan bahwa kedua nama mereka mulai dengan Hash . Itu bagian paling tidak penting dari mereka. Bagian-bagian penting datang setelah Hash - Set dan Peta , seperti yang orang lain tunjukkan. Apa yang mereka, masing-masing, adalah Set - koleksi yang tidak terurut - dan Peta - koleksi dengan akses kunci. Mereka kebetulan diimplementasikan dengan hash - dari situlah nama itu berasal - tetapi esensi mereka tersembunyi di balik bagian nama mereka.
Jangan bingung dengan nama mereka; mereka adalah hal yang sangat berbeda.
sumber
Secara
Hashset
internal mengimplementasikanHashMap
. Jika Anda melihat implementasi internal , nilai yang dimasukkan dalam HashSet disimpan sebagai kunci di HashMap dan nilainya adalah objek Dummy dari kelas Object.Perbedaan antara HashMap vs HashSet adalah: -
HashMap
berisi pasangan nilai kunci dan setiap nilai dapat diakses dengan kunci di mana sebagai HashSet perlu diulang setiap kali karena tidak ada metode get.HashMap
mengimplementasikan antarmuka Peta dan memungkinkan satu nilai null sebagai kunci dan beberapa nilai null sebagai nilai. Di manaHashSet
mengimplementasikan antarmuka Set, memungkinkan hanya satu nilai nol dan tidak ada nilai duplikat. (Ingat satu kunci nol diizinkan dalam kunci HashMap maka satu nilai nol di HashSet sebagai HashSet mengimplementasikan HashMap secara internal).HashSet
danHashMap
tidak mempertahankan urutan penyisipan saat iterasi.sumber
HashSet memungkinkan kita untuk menyimpan objek di set di mana HashMap memungkinkan kita untuk menyimpan objek berdasarkan kunci dan nilai. Setiap objek atau objek yang disimpan akan memiliki kunci.
sumber
Seperti namanya, HashMap adalah Peta asosiatif (pemetaan dari kunci ke nilai), HashSet hanyalah Set .
sumber
Perbedaan antara HashSet dan HashMap di Jawa
1) Perbedaan pertama dan paling signifikan antara HashMap dan HashSet adalah bahwa HashMap adalah implementasi dari antarmuka Peta sementara HashSet adalah implementasi dari antarmuka Set, yang berarti HashMap adalah struktur data berbasis nilai kunci dan HashSet menjamin keunikan dengan tidak mengizinkan duplikat. reality HashSet adalah pembungkus di sekitar HashMap di Jawa, jika Anda melihat kode metode add (E e) dari HashSet.java Anda akan melihat kode berikut:
di mana menempatkan Objek ke peta sebagai kunci dan nilai adalah objek akhir PRESENT yang dummy.
2) Perbedaan kedua antara HashMap dan HashSet adalah bahwa, kami menggunakan metode add () untuk meletakkan elemen ke dalam Set tetapi kami menggunakan metode put () untuk memasukkan kunci dan nilai ke HashMap di Jawa.
3) HashSet hanya memungkinkan satu kunci nol, tetapi HashMap dapat mengizinkan satu kunci nol + beberapa nilai null.
Itu semua perbedaan antara HashSet dan HashMap di Jawa. Singkatnya, HashSet dan HashMap adalah dua jenis Koleksi yang berbeda, Satu diset dan Peta lainnya.
sumber
Perbedaan antara HashSet dan HashMap di Jawa
HashSet secara internal menggunakan HashMap untuk menyimpan objek.Ketika metode add (String) memanggilnya metode HahsMap put (key, value) di mana key = String object & value = Object baru (Dummy) .jadi ia tidak memelihara duplikat karena kunci tidak lain adalah Value Obyek.
Objek yang disimpan sebagai kunci dalam Hashset / HashMap harus menggantikan kode hash & sama dengan kontrak.
Kunci yang digunakan untuk mengakses / menyimpan objek nilai di HashMap harus dinyatakan sebagai Final karena ketika dimodifikasi, objek Value tidak dapat ditemukan & mengembalikan nol.
sumber
A
HashMap
adalah untuk menambah, mendapatkan, menghapus, ... objek yang diindeks oleh kunci khusus jenis apa pun.A
HashSet
adalah untuk menambahkan elemen, menghapus elemen dan memeriksa apakah ada elemen dengan membandingkan hash mereka.Jadi HashMap berisi elemen-elemen dan HashSet mengingat hash mereka.
sumber
equals()
metode mereka .Perbedaan: berkenaan dengan heirarki: HashSet mengimplementasikan Set. HashMap mengimplementasikan Peta dan menyimpan pemetaan kunci dan nilai.
Penggunaan HashSet dan HashMap sehubungan dengan database akan membantu Anda memahami pentingnya masing-masing.
HashSet: umumnya digunakan untuk menyimpan objek koleksi unik. Misalnya: Ini dapat digunakan sebagai kelas implementasi untuk menyimpan hubungan banyak-ke-satu antara
kelas Barang dan Tawaran Kelas di mana (Barang memiliki banyak Tawaran) HashMap: digunakan untuk memetakan kunci ke nilai. Nilainya mungkin nol atau Obyek apa pun / daftar Object (yang merupakan objek itu sendiri).
sumber
Sebuah HashSet diimplementasikan dalam hal HashMap . Ini adalah pemetaan antara kunci dan objek PRESENT.
sumber
HashSet menggunakan HashMap secara internal untuk menyimpan isinya. Setiap entri dalam HashMap internal dikunci oleh Objek tunggal, sehingga semua entri hash ke dalam ember yang sama. Saya tidak ingat apa yang digunakan HashMap internal untuk menyimpan nilai-nilainya, tetapi itu tidak terlalu penting karena wadah internal itu tidak akan pernah mengandung nilai duplikat.
EDIT : Untuk menanggapi komentar Matthew, dia benar; Saya memilikinya mundur. HashMap internal dikunci dengan Objects yang membentuk elemen Set . Nilai-nilai HashMap adalah Obyek yang hanya disimpan dalam ember HashMap.
sumber
HashMap
adalahMap
implementasi, yang memungkinkan nilai duplikat tetapi bukan kunci duplikat. . Untuk menambahkan objek, pasangan Kunci / Nilai diperlukan. Nilai Null Keys dan Null diizinkan. misalnya:HashSet
adalahSet
implementasi, yang tidak memungkinkan duplikat . Jika Anda mencoba menambahkan objek duplikat, panggilan kepublic boolean add(Object o)
metode, maka set tetap tidak berubah dan kembalifalse
. misalnya:sumber
Anda cukup banyak menjawab pertanyaan Anda sendiri - hashset tidak mengizinkan nilai duplikat. akan sepele untuk membangun hashset menggunakan hashmap backing (dan hanya memeriksa untuk melihat apakah nilai sudah ada). Saya kira berbagai implementasi java melakukan itu, atau mengimplementasikan beberapa kode kustom untuk melakukannya lebih efisien.
sumber
java.util.HashSet
mengatakan bahwa ini didukung olehjava.util.HashMap
.Pada dasarnya di HashMap, pengguna harus memberikan Key dan Value, sedangkan di HashSet Anda hanya memberikan Value, Key diturunkan secara otomatis dari Value dengan menggunakan fungsi hash. Jadi setelah memiliki Key dan Value, HashSet dapat disimpan sebagai HashMap secara internal.
sumber
HashSet dan HashMap keduanya menyimpan pasangan, perbedaannya terletak pada HashMap Anda dapat menentukan kunci sementara di HashSet kuncinya berasal dari kode hash objek
sumber
HashMaps
izinkan satu kunci nol dan nilai nol. Mereka tidak disinkronkan, yang meningkatkan efisiensi. Jika diperlukan, Anda dapat membuatnya disinkronkan menggunakanCollections.SynchronizedMap()
Hashtables
jangan izinkan kunci nol dan disinkronkan.sumber
HashMap adalah implementasi dari antarmuka Peta HashSet adalah implementasi dari Set Interface
HashMap Menyimpan data dalam bentuk pasangan nilai kunci HashSet hanya menyimpan objek
Metode put digunakan untuk menambahkan elemen di peta. Tambahkan metode yang digunakan untuk menambahkan elemen adalah Set
Dalam peta hash, nilai kode hash dihitung menggunakan objek kunci. Di sini objek anggota digunakan untuk menghitung nilai kode hash yang dapat sama untuk dua objek, jadi metode yang sama () digunakan untuk memeriksa kesetaraan jika mengembalikan false yang berarti dua objek berbeda.
HashMap lebih cepat daripada hashset karena kunci unik digunakan untuk mengakses objek HashSet lebih lambat dari Hashmap
sumber