1. ปัญหา
1. HashSet, HashCode () และวิธีการเท่ากัน () เป็นอย่างไร
2. วัตถุใน Treemap และ Treeset ใช้อินเทอร์เฟซที่เปรียบเทียบได้เมื่อใดและทำไม?
2. คำตอบ:
1. HashSet ถูกนำไปใช้ผ่าน HASHMAP TreeSet จะถูกนำไปใช้ผ่าน TEEMAP แต่ตั้งค่าเฉพาะการใช้คีย์แผนที่
2. คีย์และชุดของแผนที่ทั้งคู่มีคุณสมบัติทั่วไปซึ่งเป็นเอกลักษณ์ของชุด Treemap มีคำสั่งเพิ่มเติม
3. HashCode และ Equal () ใช้สำหรับ HASHMAP เนื่องจากไม่จำเป็นต้องเรียงลำดับคุณจึงต้องให้ความสนใจกับการวางตำแหน่งและเอกลักษณ์
A.HashCode ใช้ในการคำนวณค่าแฮชและใช้ค่าแฮชเพื่อกำหนดดัชนีตารางแฮช
ข. ดัชนีในตารางแฮชเก็บรายการที่เชื่อมโยงดังนั้นคุณต้องวนซ้ำผ่านวิธีที่เท่าเทียมกันเพื่อเปรียบเทียบแต่ละวัตถุในห่วงโซ่ก่อนที่คุณจะสามารถค้นหารายการที่สอดคล้องกับค่าคีย์ได้อย่างแท้จริง
เมื่อ C.put ถ้าตารางแฮชไม่ได้อยู่ให้เพิ่มรายการก่อนรายการที่เชื่อมโยง หากอยู่ในตำแหน่งให้แทนที่ค่าในรายการและส่งคืนค่าเก่า
d. เมื่อเขียนทับ HashCode () และ Equal () ของคีย์โปรดระวังอย่าเชื่อมโยงกับคุณสมบัติที่ไม่แน่นอน มิฉะนั้นหลังจากการเปลี่ยนแปลงคุณสมบัติ HashCode จะเปลี่ยนและเท่าเทียมกันก็จะเป็นเท็จดังนั้นจะไม่พบในแผนที่ ยิ่งไปกว่านั้นวัตถุดังกล่าวไม่สามารถปล่อยออกมาได้เนื่องจากไม่สามารถพบได้ซึ่งจะกลายเป็นข้อมูลอ้างอิงที่ไม่ถูกต้อง (เทียบเท่ากับการรั่วไหลของหน่วยความจำ)
4. เนื่องจาก TREEMAP ต้องการการเรียงลำดับจึงจำเป็นต้องมีตัวเปรียบเทียบเพื่อเปรียบเทียบขนาดของค่าคีย์ แน่นอนว่ามันอยู่ในตำแหน่งที่ใช้ตัวเปรียบเทียบ
สามารถระบุ A.comparator ได้เมื่อสร้าง treemap จากนั้นใช้ comparator.compare เมื่อเรียงลำดับ
ข. หากไม่ได้ระบุตัวเปรียบเทียบระหว่างการสร้างวิธีการ compareto () จะถูกใช้ซึ่งต้องใช้คีย์ในการใช้อินเทอร์เฟซที่เปรียบเทียบได้
C.TreeMap ถูกนำมาใช้โดยใช้โครงสร้างข้อมูลต้นไม้ดังนั้นการวางตำแหน่งสามารถทำได้โดยใช้อินเทอร์เฟซเปรียบเทียบ
นำเข้า java.util.hashset; นำเข้า java.util.iterator; คลาสสาธารณะ wpsklhashset {// การใช้ชุดใน java (ไม่อนุญาตให้ใช้วัตถุที่ซ้ำกัน): โมฆะคงที่สาธารณะ (สตริง [] args) {hashset hashset = new hashset (); สตริง A = สตริงใหม่ String ("B"); hashset.add (a); hashset.add (b); system.out.println (hashset.size ()); string cz = hashset.add (c)? "วัตถุนี้ไม่มีอยู่": "มีอยู่แล้ว"; System.out.println ("ทดสอบว่าสามารถเพิ่มวัตถุได้หรือไม่"+CZ); System.out.println (hashset.isempty ()); // ทดสอบว่าวัตถุมีอยู่แล้วในระบบ ในขณะที่ (ir.hasnext ()) {system.out.println (ir.next ());} // ทดสอบว่าวัตถุสามารถลบ system.out.println (hashset.remove ("a"); system.out.println (hashset.remove ("); ir = hashset.iterator (); ในขณะที่ (ir.hasnext ()) {system.out.println (ir.next ());}}}/*** ผ่านโปรแกรมนี้คุณยังสามารถทดสอบความผิดปกติขององค์ประกอบที่เพิ่มขึ้นของชุดต้นไม้และลำดับของการส่งออก Treeset (); tree.add ("จีน"); tree.add ("อเมริกา"); tree.add ("ญี่ปุ่น"); tree.add ("จีน"); iterator iter = tree.iterator (); ในขณะที่ (iter.hasnext ()) {system.out.println (iter.next ());}}}นอกจากนี้ฉันยังเปลี่ยนความแตกต่างอื่น ๆ (ขอบคุณเพื่อน Andygulin ของฉันที่ "Baidu รู้")::
1. Treeset ถูกนำไปใช้โดยต้นไม้สองตัว ข้อมูลในชุดต้นไม้จะถูกจัดเรียงโดยอัตโนมัติและไม่อนุญาตให้มีค่าว่าง
2. HashSet ถูกนำไปใช้โดยตารางแฮช ข้อมูลใน HashSet ไม่ได้ถูกเรียงลำดับ คุณสามารถใส่ null ได้ แต่คุณสามารถใส่ค่าว่างได้เพียงครั้งเดียว ค่าในทั้งสองไม่สามารถทำซ้ำได้เช่นเดียวกับข้อ จำกัด ที่ไม่ซ้ำกันในฐานข้อมูล
3. HashSet ต้องการให้วัตถุที่วางจะต้องใช้วิธี HashCode () วัตถุที่วางไว้ถูกทำเครื่องหมายด้วยรหัส HashCode และวัตถุ HashCode ที่มีเนื้อหาเดียวกันมี hashCode เดียวกันดังนั้นเนื้อหาที่วางไว้ไม่สามารถทำซ้ำได้ แต่วัตถุของคลาสเดียวกันสามารถวางในกรณีที่แตกต่างกัน
สรุป
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้เกี่ยวกับความแตกต่างระหว่างวิธีการใช้งานของ Hashset และ Treeset และฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงหัวข้ออื่น ๆ ที่เกี่ยวข้องในเว็บไซต์นี้ต่อไป หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!