Apa perbedaan di antara mereka? saya tahu itu
LinkedHashSet adalah versi HashSet yang diurutkan yang memelihara Daftar yang ditautkan ganda di semua elemen. Gunakan kelas ini alih-alih HashSet saat Anda peduli dengan urutan iterasi. Saat Anda mengulang melalui HashSet, urutannya tidak dapat diprediksi, sementara LinkedHashSet memungkinkan Anda mengulangi elemen-elemen sesuai urutan dimasukkannya.
Tetapi dalam kode sumber LinkedHashSet hanya ada memanggil konstruktor dari HashSet. Jadi di mana Daftar ditautkan ganda dan urutan penyisipan?
java
hashset
linkedhashset
Shikarn-O
sumber
sumber
Jawaban:
Jawaban terletak pada yang konstruktor yang
LinkedHashSet
menggunakan untuk membangun kelas dasar:Dan (salah satu contoh)
HashSet
konstruktor yang mengambil argumen boolean dijelaskan, dan terlihat seperti ini:sumber
LinkedHashSet
Konstruktor memanggil konstruktor kelas dasar berikut:Seperti yang Anda lihat, peta internal adalah a
LinkedHashMap
. Jika Anda melihat ke dalamLinkedHashMap
, Anda akan menemukan bidang berikut:Ini adalah daftar tertaut yang dimaksud.
sumber
HashSet tidak diatur dan tidak disortir .
LinkedHashSet adalah versi HashSet yang dipesan .
Satu-satunya perbedaan antara HashSet dan LinkedHashSet adalah bahwa:
LinkedHashSet mempertahankan urutan penyisipan.
Saat kami mengulang melalui HashSet , pesanannya tidak dapat diprediksi sementara itu dapat diprediksi dalam kasus LinkedHashSet .
Alasan bagaimana LinkedHashSet mempertahankan urutan penyisipan adalah bahwa:
Struktur data yang digunakan yang mendasarinya adalah Doubly-Linked-List .
sumber
Anda harus melihat pada sumber
HashSet
konstruktor itu panggilan ... itu adalah konstruktor khusus yang membuat dukunganMap
yangLinkedHashMap
bukan hanyaHashMap
.sumber
Saya sarankan Anda untuk menggunakan
LinkedHashSet
sebagian besar waktu, karena memiliki kinerja yang lebih baik secara keseluruhan ):HashMap
, karena sebagian besar waktu kita menggunakan struktur Set untuk iterasi.Anda dapat melihat halaman uji sumber di sini: Contoh Pengujian Kinerja Akhir
sumber
HashSet: Sebenarnya tidak teratur. jika Anda melewatkan parameter berarti
Put Out: Mungkin
2,1,3
tidak dapat diprediksi. lain kali pesanan lain.LinkedHashSet()
yang menghasilkan Pesanan FIFO.sumber
HashSet
tidak mempertahankan urutan item penyisipanLinkedHashSet
mempertahankan urutan item penyisipanContoh
HashSet
keluaranLinkedHashSet
keluaransumber
HashSet:
Struktur data yang digarisbawahi adalah Hashtable. Objek duplikat tidak diizinkan. Urutan pemasukan tidak disimpan dan didasarkan pada kode objek hash. Penyisipan kosong dapat dilakukan (hanya sekali). Ini mengimplementasikan antarmuka Serializable, Clonable tetapi tidak RandomAccess. HashSet sebaiknya dipilih jika operasi yang sering dilakukan adalah operasi pencarian.
Konstruktor:
LinkedHashSet:
Ini adalah kelas anak dari HashSet. itu persis sama dengan HashSet termasuk (Konstruktor dan Metode) kecuali perbedaan berikut.
Perbedaan HashSet:
LinkedHashSet:
sumber
Jika Anda melihat konstruktor yang dipanggil dari
LinkedHashSet
kelas, Anda akan melihat bahwa secara internal ituLinkedHashMap
adalah yang digunakan untuk tujuan backing.sumber
Semua Metode dan konstruktor sama tetapi hanya satu perbedaan adalah LinkedHashset akan mempertahankan urutan penyisipan tetapi tidak akan memungkinkan duplikat.
Hashset tidak akan mempertahankan urutan penyisipan apa pun. Ini adalah kombinasi dari Daftar dan Atur sederhana :)
sumber