Perbezaan antara HashMap dan HashSet

Apabila anda mempelajari bahasa komputer yang baru, salah satu perkara pertama yang anda cenderung bertanya ialah cara untuk bekerja dengan kumpulan data yang besar. Topik ini sering diliputi di bawah topik "Struktur Data". Sekiranya anda menggali lebih mendalam, anda mesti merangkumi topik seperti senarai, barisan, susunan, dan pokok-pokok biner yang dikaitkan di antara banyak struktur data lain. Di Jawa, struktur ini adalah sebahagian daripada Rangka Kerja Koleksi Jawa. Pengumpulan tidak lain hanyalah sejenis struktur data yang merujuk kepada pengelompokan pelbagai elemen data dan Rangka Kerja Koleksi Java menyeragamkan cara kumpulan-kumpulan objek tersebut dikendalikan. Malah, rangka kerja koleksi telah direka untuk memenuhi beberapa matlamat.

Rangka kerja koleksi keseluruhan dirancang di sekitar satu set antara muka standard. Beberapa perlaksanaan standard seperti LinkedList, HashSet, dan TreeSet disediakan oleh antara muka yang anda mungkin ada. Di samping itu, anda juga boleh melaksanakan koleksi anda sendiri jika anda memilih. Walau bagaimanapun, sebagai tambahan kepada koleksi, rangka kerja mentakrifkan beberapa antara muka dan kelas peta. Java mengandungi tiga pelaksanaan peta tujuan umum - HashMap, TreeMap dan LinkedHashMap - yang menyimpan pasangan kunci / nilai. Walaupun peta tidak secara kolektif koleksi, mereka bersepadu sepenuhnya dengan koleksi. Malah, peta memberi tumpuan kepada kumpulan persatuan antara objek. Artikel ini merumuskan perbezaan utama antara HashMap dan HashSet.

Apa itu HashMap?

HashMap adalah pelaksanaan yang paling umum digunakan antara muka Peta yang menyediakan peta kunci / nilai dasar di mana unsur-unsur tidak teratur. Ia menggunakan nilai khas yang dipanggil kod hash, bukan carian lambat kekunci. Kod hash adalah satu cara untuk mengambil maklumat dalam objek yang dipersoalkan dan menjadikannya "int unik" untuk objek itu. Ia hanya berfungsi pada prinsip hashing yang bermaksud ia menggunakan fungsi hash untuk memetakan nilai-nilai. Sama seperti Vector dan Stack mempunyai pengganti mereka dalam ArrayList dan LinkedList, Hashtable mempunyai pengganti dalam HashMap. Ia meluaskan AbstrakMap untuk melaksanakan antara muka Peta menggunakan perwakilan Hashtable dalaman. Dan serupa dengan pelaksanaan umum yang lain, HashMap menyokong kaedah pilihan Map, membolehkan nilai batal, dan tidak disegerakkan.

Apa itu HashSet?

HashSet adalah salah satu ahli Rangka Kerja Koleksi Jawa yang melaksanakan antara muka Set, yang disokong oleh jadual hash yang sebenarnya merupakan contoh HashMap. Seperti namanya, ia dilaksanakan oleh jadual hash, suatu array di mana unsur-unsur disimpan pada kedudukan yang diperolehi daripada kandungannya. Tidak seperti Peta, Set adalah Pengumpulan dengan sama antara muka yang sama, jadi tidak ada fungsi tambahan seperti terdapat dengan dua Senarai yang berbeza. HashSet menggunakan fungsi hashing yang direka khusus untuk mencari pantas. Ia adalah koleksi unik objek unik yang tidak dapat menyimpan nilai pendua. HashSet meluaskan kelas AbstrakSet yang melaksanakan antara muka Set. Walau bagaimanapun, HashSet tidak menentukan sebarang kaedah tambahan selain yang disediakan oleh cermin dan antarmuka.

Perbezaan antara HashMap dan HashSet

  1. Asas

HashMap adalah pelaksanaan yang paling umum digunakan antara muka Peta yang menyediakan peta kunci / nilai dasar di mana unsur-unsur tidak teratur. Ia hanya berfungsi pada prinsip hashing yang bermaksud ia menggunakan fungsi hash untuk memetakan nilai-nilai. HashSet, sebaliknya, merupakan salah satu ahli Rangka Kerja Koleksi Jawa yang melaksanakan antara muka Set, yang disokong oleh jadual hash yang sebenarnya merupakan contoh HashMap. Secara ringkas, HashMap melaksanakan antara muka Peta, sedangkan HashSet mengimplementasikan antara muka Set.

  1. Fungsi

HashSet mencipta koleksi yang menggunakan jadual hash untuk penyimpanan. Jadual Hash menyimpan maklumat menggunakan kaedah yang dinamakan hashing. HashSet menggunakan fungsi hashing, yang direka khusus untuk pencarian cepat, untuk menyimpan elemen atau nilai. Kebanyakan fungsi HashSet menyediakan melalui AbstractCollection dan AbstractSet superclass, yang berkongsi HashSet dengan TreeSet. HashMap meluaskan AbstractMap untuk melaksanakan antara muka Peta menggunakan perwakilan Hashtable dalaman. Kedua-dua kelas itu tidak disegerakkan bermakna mereka tidak sesuai untuk operasi benang selamat.

  1. Nilai Duplikat

Kerana Peta tidak menyokong kekunci pendua, HashMap tidak membenarkan kekunci pendua tetapi dibenarkan untuk mempunyai nilai pendua. Ini bermakna nilai pendua boleh wujud di HashMap tetapi anda boleh menggunakan koleksi sebagai nilai terhadap beberapa kekunci. Setiap kunci mestilah unik dalam HashMap dan satu kunci tidak dibenarkan untuk mempunyai lebih daripada 1 nilai. HashSet, sebaliknya, tidak boleh mempunyai unsur pendua dengan definisi semata set, yang bermaksud anda tidak boleh menyimpan nilai pendua dalam HashSet. HashMap hanya membenarkan satu kunci null tetapi membenarkan sebarang bilangan nilai batal, sedangkan HashSet membenarkan hanya satu nilai tidak sah.

  1. Mekanisme Penyimpanan

HashMap berfungsi pada prinsip hashing yang bermaksud ia menggunakan fungsi hash untuk memetakan nilai-nilai secara dalaman menggunakan algoritma hashing untuk membolehkan pengambilan mudah. Mekanisme hashing yang sebenar selalu mengembalikan hashCode () yang sama apabila diterapkan pada objek yang sama. HashSet, sebaliknya, menggunakan HashMap secara dalaman sebagai struktur data sokongan untuk menambah atau menyimpan objek. Ini bermakna apabila objek HashSet dibuat, ia akan mewujudkan objek HashMap.

HashMap vs HashSet: Carta Perbandingan

Ringkasan HashMap Vs. HashSet

Walaupun kedua-dua HashMap dan HashSet tidak disegerakkan bermakna mereka tidak sesuai untuk operasi selamat thread dan mereka berbeza-beza membina, mereka menyediakan prestasi malar masa untuk operasi asas seperti menambah, mengeluarkan elemen dan sebagainya. HashMap adalah pelaksanaan umum antara muka Peta yang menyimpan pasangan kunci / nilai, HashSet adalah pelaksanaan antara muka Set. A HashSet menggunakan HashMap untuk menyokong pelaksanaannya. Walau bagaimanapun, HashMap menggunakan prinsip hashing dan menggunakannya untuk memburu kunci dengan cepat.