1. Masalah
1. Bagaimana Hashset, Treeset menggunakan HashCode () dan Equal () Metode
2. Kapan dan mengapa objek di TreeMap dan Treeset menerapkan antarmuka yang sebanding?
2. Jawab:
1. Hashset diimplementasikan melalui HashMap, Treeset diimplementasikan melalui TreeMap, tetapi set hanya menggunakan kunci peta.
2. Kunci dan set peta keduanya memiliki fitur umum, yang merupakan keunikan set. TreeMap memiliki pesanan tambahan.
3. HashCode dan Equal () digunakan untuk hashmap. Karena tidak perlu menyortir, Anda hanya perlu memperhatikan posisi dan keunikan.
A.HashCode digunakan untuk menghitung nilai hash, dan nilai hash digunakan untuk menentukan indeks tabel hash.
B. Indeks dalam tabel hash menyimpan daftar tertaut, jadi Anda harus mengulang metode yang sama untuk membandingkan setiap objek pada rantai sebelum Anda dapat benar -benar menemukan entri yang sesuai dengan nilai kunci.
Saat c.put, jika tabel hash tidak ditemukan, tambahkan entri sebelum daftar yang ditautkan. Jika berada, ganti nilai di entri dan kembalikan nilai lama.
D. Saat menimpa kode hashcode () dan sama () dari kunci, berhati -hatilah untuk tidak mengaitkannya dengan sifat yang dapat berubah. Kalau tidak, setelah properti berubah, kode hash akan berubah dan setara juga akan salah, sehingga tidak akan ditemukan di peta. Selain itu, objek seperti itu tidak dapat dirilis karena tidak dapat ditemukan, yang akan menjadi referensi yang tidak valid (setara dengan kebocoran memori).
4. Karena TreeMap memerlukan penyortiran, pembanding diperlukan untuk membandingkan ukuran nilai kunci. Tentu saja, itu juga diposisikan menggunakan pembanding.
A. Komparator dapat ditentukan saat membuat TreeMap, dan kemudian gunakan pembanding.
B. Jika pembanding tidak ditentukan selama pembuatan, metode key.compareto () akan digunakan, yang membutuhkan kunci untuk mengimplementasikan antarmuka yang sebanding.
C. TREEMAP diimplementasikan menggunakan struktur data pohon, sehingga penentuan posisi dapat diselesaikan dengan menggunakan antarmuka Bandingkan.
impor java.util.hashset; impor java.util.iterator; kelas publik wpsklhashset {// penggunaan set dalam java (objek duplikat tidak diperbolehkan): public static void main (string [] args) {hashset hashset = new hashset (); string a = new string ("a"); String ("b"); hashset.add (a); hashset.add (b); system.out.println (hashset.size ()); string cz = hashset.add (c)? "Objek ini tidak ada": "sudah ada"; System.out.println ("Uji apakah suatu objek dapat ditambahkan"+cz); System.out.println (hashset.isempty ()); // uji apakah suatu objek sudah terkandung di dalamnya System.out.println (hashset.contains ("a"); iteratornya. while (ir.hasnext ()) {System.out.println (ir.next ());} // uji apakah suatu objek dapat menghapus system.out.println (hashset.remove ("a")); System.out.println (hashset.remove ("a")); // setelah Anda menguji, jika Anda ingin menguji (hashset.remove ("a")); ir = hashset.iterator (); while (ir.hasnext ()) {System.out.println (ir.next ());}}}/*** Melalui program ini, Anda juga dapat menguji gangguan elemen tambahan dari set pohon dan urutan output*/impor treees {public publy {public void (impor java.util. = TreeSet baru (); Tree.add ("China"); Tree.add ("America"); Tree.add ("Jepang"); Tree.add ("China"); Iterator iter = Tree.iterator (); while (iter.hasnext ()) {System.out.println (iter.next ());}}}Juga, saya menyalakan beberapa perbedaan lain (terima kasih kepada teman Andygulin saya yang "Baidu tahu"):
1. Treeset diimplementasikan oleh pohon dua perbedaan. Data di Treeset secara otomatis diurutkan dan nilai nol tidak diizinkan.
2. Hashset diimplementasikan oleh tabel hash. Data dalam hashset tidak berurutan. Anda dapat menempatkan nol, tetapi Anda hanya bisa menempatkan satu nol. Nilai -nilai dalam keduanya tidak dapat diulang, seperti kendala unik dalam database.
3. Hashset mensyaratkan bahwa objek yang ditempatkan harus mengimplementasikan metode hashcode (). Objek yang ditempatkan ditandai dengan kode kode hash, dan objek kode hash dengan konten yang sama memiliki kode hash yang sama, sehingga konten yang ditempatkan tidak dapat diulang. Tetapi objek dari kelas yang sama dapat ditempatkan dalam contoh yang berbeda.
Meringkaskan
Di atas adalah semua isi artikel ini tentang perbedaan antara metode penggunaan hashset dan treeset, dan saya harap ini akan membantu semua orang. Teman yang tertarik dapat terus merujuk ke topik terkait lainnya di situs ini. Jika ada kekurangan, silakan tinggalkan pesan untuk menunjukkannya. Terima kasih teman atas dukungan Anda untuk situs ini!