Ketika Anda mempelajari bahasa komputer baru, salah satu hal pertama yang cenderung Anda tanyakan adalah bagaimana bekerja dengan kelompok data yang besar. Topik ini sering dibahas dalam topik "Struktur Data". Jika Anda menggali lebih dalam, Anda harus menemukan topik seperti daftar tertaut, antrian, tumpukan, dan pohon biner di antara banyak struktur data lainnya. Di Jawa, struktur ini adalah bagian dari Java Collections Framework. Koleksi tidak lain adalah tipe struktur data yang merujuk pada pengelompokan beberapa elemen data dan Java Collections Framework menstandarisasi cara penanganan kelompok objek ini. Bahkan, kerangka koleksi dirancang untuk memenuhi beberapa tujuan.
Kerangka kerja seluruh koleksi dirancang di sekitar seperangkat antarmuka standar. Beberapa implementasi standar seperti LinkedList, HashSet, dan TreeSet disediakan oleh antarmuka ini yang Anda dapat apa adanya. Selain itu, Anda juga dapat mengimplementasikan koleksi Anda sendiri jika Anda mau. Namun, di samping koleksi, kerangka kerja mendefinisikan beberapa antarmuka peta dan kelas. Java berisi tiga implementasi peta tujuan umum - HashMap, TreeMap dan LinkedHashMap - yang menyimpan pasangan kunci / nilai. Meskipun peta bukan koleksi teknis, mereka sepenuhnya terintegrasi dengan koleksi. Faktanya, peta fokus pada kelompok asosiasi antar objek. Artikel ini merangkum perbedaan utama antara HashMap dan HashSet.
HashMap adalah implementasi antarmuka Peta yang paling umum digunakan yang menyediakan kunci / nilai dasar peta di mana elemen-elemennya tidak berurutan. Ini menggunakan nilai khusus yang disebut kode hash, bukan pencarian kunci yang lambat. Kode hash adalah cara untuk mengambil informasi dalam objek yang bersangkutan dan mengubahnya menjadi int yang “relatif unik” untuk objek tersebut. Ini hanya bekerja pada prinsip hashing yang berarti menggunakan fungsi hash untuk memetakan nilai identifikasi. Seperti halnya Vector dan Stack yang memiliki penggantian di ArrayList dan LinkedList, Hashtable memiliki pengganti di HashMap. Itu memperluas AbstractMap untuk mengimplementasikan antarmuka Peta menggunakan representasi Hashtable internal. Dan mirip dengan implementasi tujuan umum lainnya, HashMap mendukung metode opsional Peta, memungkinkan nilai nol, dan tidak disinkronkan.
HashSet adalah salah satu anggota Java Collections Framework yang mengimplementasikan antarmuka Set, didukung oleh tabel hash yang sebenarnya merupakan instance HashMap. Seperti namanya, ini diimplementasikan oleh tabel hash, sebuah array di mana elemen disimpan pada posisi yang berasal dari isinya. Tidak seperti Peta, Set persis Koleksi dengan antarmuka yang persis sama, jadi tidak ada fungsi tambahan seperti ada dengan dua Daftar yang berbeda. HashSet menggunakan fungsi hashing yang dirancang khusus untuk pencarian cepat. Ini adalah kumpulan objek unik yang tidak disusun yang tidak dapat menyimpan nilai duplikat. HashSet memperluas kelas AbstractSet yang mengimplementasikan Set interface. Namun, HashSet tidak mendefinisikan metode tambahan apa pun selain yang disediakan oleh superclasses dan interface-nya.
HashMap adalah implementasi antarmuka Peta yang paling umum digunakan yang menyediakan kunci / nilai dasar peta di mana elemen-elemennya tidak berurutan. Ini hanya bekerja pada prinsip hashing yang berarti menggunakan fungsi hash untuk memetakan nilai identifikasi. HashSet, di sisi lain, adalah salah satu anggota Java Collections Framework yang mengimplementasikan antarmuka Set, didukung oleh tabel hash yang sebenarnya merupakan instance HashMap. Secara sederhana, HashMap mengimplementasikan antarmuka Peta, sedangkan HashSet mengimplementasikan antarmuka Set.
HashSet membuat koleksi yang menggunakan tabel hash untuk penyimpanan. Tabel hash menyimpan informasi menggunakan metode yang disebut hashing. HashSet menggunakan fungsi hashing, yang secara khusus dirancang untuk pencarian cepat, untuk menyimpan elemen atau nilai. Sebagian besar fungsi HashSet disediakan melalui AbstractCollection dan AbstractSet superclass, yang dibagikan HashSet dengan TreeSet. HashMap memperluas AbstractMap untuk mengimplementasikan antarmuka Peta menggunakan representasi Hashtable internal. Kedua kelas tidak disinkronkan yang berarti mereka tidak cocok untuk operasi yang aman.
Karena Peta tidak mendukung kunci duplikat, HashMap tidak mengizinkan kunci duplikat tetapi diizinkan memiliki nilai duplikat. Ini berarti nilai duplikat dapat ada di HashMap tetapi Anda dapat menggunakan koleksi sebagai nilai terhadap beberapa kunci. Setiap kunci harus unik dalam HashMap dan satu kunci tidak dapat memiliki lebih dari 1 nilai. HashSet, di sisi lain, tidak dapat memiliki elemen duplikat hanya dengan definisi Set, yang berarti Anda tidak dapat menyimpan nilai duplikat di HashSet. HashMap hanya mengizinkan satu kunci nol tetapi memungkinkan sejumlah nilai nol, sedangkan HashSet hanya mengizinkan satu nilai nol.
HashMap bekerja berdasarkan prinsip hashing yang artinya menggunakan fungsi hash untuk memetakan identifikasi nilai secara internal menggunakan algoritma hashing untuk memungkinkan pengambilan yang mudah. Mekanisme hashing sejati selalu mengembalikan kode hash yang sama () ketika diterapkan pada objek yang sama. HashSet, di sisi lain, secara internal menggunakan HashMap sebagai struktur data pendukung untuk menambah atau menyimpan objek. Ini berarti ketika objek HashSet dibuat, itu akan membuat objek HashMap.
Meskipun baik HashMap dan HashSet tidak disinkronkan artinya mereka tidak cocok untuk operasi thread-safe dan mereka sama sekali berbeda konstruksi, mereka memberikan kinerja waktu yang konstan untuk operasi dasar seperti menambah, menghapus elemen dll. Sementara HashMap adalah implementasi tujuan umum dari antarmuka Peta yang menyimpan pasangan kunci / nilai, HashSet adalah implementasi dari antarmuka Set. HashSet menggunakan HashMap untuk mendukung implementasinya. Namun, HashMap menggunakan prinsip hashing dan menggunakannya untuk dengan cepat mencari kunci.