นอกเหนือจากความจริงที่HashSet
ไม่อนุญาตให้มีค่าซ้ำกันความแตกต่างระหว่างHashMap
และHashSet
คืออะไร
ฉันหมายถึงการนำไปปฏิบัติอย่างชาญฉลาด? มันค่อนข้างคลุมเครือเพราะทั้งคู่ใช้ตารางแฮชเพื่อเก็บค่า
นอกเหนือจากความจริงที่HashSet
ไม่อนุญาตให้มีค่าซ้ำกันความแตกต่างระหว่างHashMap
และHashSet
คืออะไร
ฉันหมายถึงการนำไปปฏิบัติอย่างชาญฉลาด? มันค่อนข้างคลุมเครือเพราะทั้งคู่ใช้ตารางแฮชเพื่อเก็บค่า
คำตอบ:
พวกเขาเป็นโครงสร้างที่แตกต่างกันอย่างสิ้นเชิง คือการดำเนินการHashMap
แผนที่แผนที่กุญแจสู่ค่า การค้นหาคีย์เกิดขึ้นโดยใช้แฮชMap
บนมืออื่น ๆ ที่เป็นคือการดำเนินการHashSet
ชุดถูกออกแบบมาเพื่อให้ตรงกับแบบจำลองทางคณิตศาสตร์ของชุด A ใช้เพื่อสนับสนุนการใช้งานตามที่คุณบันทึกไว้ อย่างไรก็ตามมันใช้อินเทอร์เฟซที่แตกต่างอย่างสิ้นเชิงSet
HashSet
HashMap
เมื่อคุณกำลังมองหาสิ่งที่ดีที่สุดCollection
สำหรับจุดประสงค์ของคุณการสอนนี้เป็นจุดเริ่มต้นที่ดี ถ้าคุณอยากรู้ว่าเกิดอะไรขึ้นจริง ๆก็มีหนังสือเล่มนั้นอยู่ด้วย
HashSet เป็นชุดเช่น{1,2,3,4,5}
HashMap เป็นแผนที่สำคัญ -> ค่า (กุญแจถึงค่า) แผนที่เช่น{a -> 1, b -> 2, c -> 2, d -> 1}
โปรดสังเกตในตัวอย่างของฉันด้านบนว่าใน HashMap ต้องไม่มีคีย์ที่ซ้ำกัน แต่อาจมีค่าซ้ำกัน
ใน HashSet จะต้องไม่มีองค์ประกอบที่ซ้ำกัน
HashSet ไม่ได้ทำการซิงโครไนซ์ซึ่งหมายความว่ามันไม่เหมาะสำหรับการดำเนินการกับเธรดที่ปลอดภัยจนกว่าจะไม่ซิงโครไนซ์อย่างชัดเจน
add contains next notes
HashSet O(1) O(1) O(h/n) h is the table
HashMap ไม่ได้รับการซิงโครไนซ์ซึ่งหมายความว่าพวกเขาไม่เหมาะสำหรับการดำเนินการที่ปลอดภัยต่อเธรดจนกว่าจะมีการซิงโครไนซ์อย่างชัดเจน [ความคล้ายคลึงกัน]
get containsKey next Notes
HashMap O(1) O(1) O(h/n) h is the table
โปรดอ้างอิงบทความนี้เพื่อค้นหาข้อมูลเพิ่มเติม
มันจริงๆความอัปยศที่ทั้งชื่อของพวกเขาเริ่มต้นด้วยการแฮ นั่นคือส่วนที่สำคัญที่สุดของพวกเขา ส่วนสำคัญมาจากHash - SetและMapตามที่คนอื่น ๆ ได้ชี้ให้เห็น สิ่งที่พวกเขาตามลำดับคือชุด - ชุดสะสมที่ไม่ได้เรียงลำดับ - และแผนที่ - ชุดสะสมพร้อมการเข้าถึงแบบมีกุญแจ พวกมันถูกนำมาใช้กับแฮชนั่นคือที่มาของชื่อ - แต่สาระสำคัญของพวกเขาถูกซ่อนอยู่หลังชื่อของส่วนนั้น
อย่าสับสนกับชื่อของพวกเขา พวกเขาต่างกันอย่างลึกซึ้ง
การดำเนินการภายในHashset
HashMap
หากคุณเห็นการใช้งานภายในค่าที่แทรกใน HashSet จะถูกเก็บไว้เป็นคีย์ใน HashMap และค่าเป็นวัตถุจำลองของคลาสวัตถุ
ความแตกต่างระหว่าง HashMap กับ HashSet คือ: -
HashMap
มีคู่ของค่าคีย์และแต่ละค่าสามารถเข้าถึงได้โดยคีย์เนื่องจาก HashSet จำเป็นต้องทำซ้ำทุกครั้งเนื่องจากไม่มีเมธอด getHashMap
ใช้ Map interface และอนุญาตให้ค่า Null หนึ่งค่าเป็นคีย์และค่า Null หลายค่าเป็นเช่นนั้นHashSet
ดำเนินการตั้งค่าอินเตอร์เฟสอนุญาตค่า Null เพียงหนึ่งค่าและไม่มีค่าซ้ำกัน (อนุญาตให้ใช้หนึ่งคีย์ null ใน HashMap Remeber หนึ่งค่าคีย์ใน HashSet เป็น HashSet ดำเนิน HashMap ภายใน) HashSet
และHashMap
ไม่รักษาลำดับของการแทรกในขณะที่วนซ้ำHashSet ช่วยให้เราสามารถจัดเก็บวัตถุในชุดที่เป็น HashMap ช่วยให้เราสามารถจัดเก็บวัตถุบนพื้นฐานของคีย์และค่า ทุกวัตถุหรือวัตถุที่เก็บไว้จะมีกุญแจ
ในฐานะที่เป็นชื่อบ่งบอกถึงการเป็นHashMap เป็นเชื่อมโยงแผนที่ (ทำแผนที่จากกุญแจสำคัญในการค่า) ซึ่งเป็นHashSetเป็นเพียงชุด
ความแตกต่างระหว่าง HashSet และ HashMap ใน Java
1)ความแตกต่างที่สำคัญที่สุดระหว่าง HashMap และ HashSet คือ HashMap เป็นการใช้งานแผนที่อินเตอร์เฟสในขณะที่ HashSet เป็นการดำเนินการของ Set interface ซึ่งหมายความว่า HashMap เป็นโครงสร้างข้อมูลตามค่าคีย์และ HashSet รับประกันเอกลักษณ์โดยไม่อนุญาตให้ซ้ำซ้อน ความเป็นจริง HashSet เป็น wrapper รอบ HashMap ใน Java ถ้าคุณดูที่รหัสของวิธีการเพิ่ม (E e) ของ HashSet.java คุณจะเห็นรหัสต่อไปนี้:
public boolean add(E e)
{
return map.put(e, PRESENT)==null;
}
โดยที่การวางวัตถุลงในแผนที่เป็นคีย์และค่าเป็นวัตถุสุดท้ายที่มีอยู่จำลอง
2)ความแตกต่างที่สองระหว่าง HashMap และ HashSet คือเราใช้วิธี add () เพื่อใส่องค์ประกอบเข้าไปใน Set แต่เราใช้วิธี put () เพื่อใส่คีย์และค่าลงใน HashMap ใน Java
3) HashSet อนุญาตให้ใช้เพียงปุ่มเดียวเท่านั้น แต่ HashMap สามารถอนุญาตให้ใช้ปุ่ม null หนึ่งปุ่ม + ค่า Null หลายค่า
นั่นคือความแตกต่างระหว่าง HashSet และ HashMap ใน Java โดยสรุป HashSet และ HashMap เป็นหนึ่งในคอลเลกชันที่แตกต่างกันสองประเภทที่ถูกตั้งค่าและอื่น ๆ ที่เป็นแผนที่
ความแตกต่างระหว่าง HashSet และ HashMap ใน Java
HashSet ใช้ HashMap ภายในเพื่อจัดเก็บวัตถุเมื่อเพิ่ม (String) วิธีการที่เรียกว่าวิธีการใส่ HahsMap (คีย์ค่า) วิธีการที่สำคัญ = วัตถุสตริงและค่า = วัตถุใหม่ (Dummy) ดังนั้นจึงไม่มีการทำซ้ำเพราะคีย์ไม่มีค่า วัตถุ.
วัตถุที่เก็บไว้เป็นกุญแจสำคัญใน Hashset / HashMap ควรแทนที่ hashcode & เท่ากับสัญญา
คีย์ที่ใช้ในการเข้าถึง / เก็บค่าวัตถุใน HashMap ควรประกาศเป็น Final เพราะเมื่อมีการแก้ไขวัตถุ Value ไม่สามารถหาตำแหน่งและคืนค่าว่าง
A HashMap
คือการเพิ่มรับเอาออก ... วัตถุที่สร้างดัชนีโดยคีย์ที่กำหนดเองทุกประเภท
A HashSet
คือการเพิ่มองค์ประกอบลบองค์ประกอบและตรวจสอบว่ามีองค์ประกอบโดยการเปรียบเทียบแฮชของพวกเขา
ดังนั้น HashMap จึงมีองค์ประกอบต่างๆและ HashSet จะจดจำแฮชของพวกเขา
equals()
วิธีการของพวกเขา
ความแตกต่าง: เกี่ยวกับลำดับความสำคัญ: HashSet ใช้ Set HashMap ใช้แผนที่และจัดเก็บการทำแผนที่ของคีย์และค่า
การใช้ HashSet และ HashMap เกี่ยวกับฐานข้อมูลจะช่วยให้คุณเข้าใจความสำคัญของแต่ละรายการ
HashSet:โดยทั่วไปจะใช้สำหรับการจัดเก็บวัตถุการเก็บรวบรวมที่ไม่ซ้ำกัน เช่น: มันอาจใช้เป็นคลาสการใช้งานสำหรับการจัดเก็บความสัมพันธ์แบบหนึ่งต่อหนึ่งระหว่าง
รายการระดับและการเสนอราคาระดับที่ (รายการมีการเสนอราคาจำนวนมาก)
HashMap:ใช้ในการแมปคีย์เพื่อค่าค่าอาจเป็นโมฆะหรือวัตถุใด ๆ / list of Object (ซึ่งเป็นวัตถุในตัวเอง)
HashSetจะดำเนินการในแง่ของHashMap มันเป็นการจับคู่ระหว่างกุญแจกับวัตถุปัจจุบัน
HashSet ใช้ HashMap ภายในเพื่อจัดเก็บรายการ แต่ละรายการใน HashMap ภายในจะถูกคีย์โดยวัตถุเดียวดังนั้นรายการทั้งหมดแฮชเข้าไปในที่ฝากข้อมูลเดียวกัน ฉันไม่จำสิ่งที่ HashMap ภายในใช้เพื่อจัดเก็บค่าของมัน แต่มันไม่สำคัญเพราะคอนเทนเนอร์ภายในนั้นจะไม่มีค่าที่ซ้ำกัน
แก้ไข : เพื่อตอบความคิดเห็นของ Matthew เขาพูดถูก ฉันย้อนกลับไป HashMap ภายในเป็นคีย์กับวัตถุที่ทำขึ้นองค์ประกอบตั้ง ค่าของ HashMap เป็นวัตถุที่เพิ่งเก็บไว้ในที่เก็บ HashMap
HashMap
เป็นการMap
ใช้งานช่วยให้ค่าที่ซ้ำกันแต่ไม่ได้คีย์ซ้ำ . สำหรับการเพิ่มวัตถุจำเป็นต้องใช้คู่ของคีย์ / ค่า อนุญาตให้ใช้ค่า Null Keys และ Null เช่น:
{ล้ำหน้าด้วย> 3 โลก> 5 ลล์> 2 Nice-> 4}
HashSet
คือSet
การดำเนินการที่ไม่ได้รับอนุญาตให้ซ้ำกันถ้าคุณพยายามที่จะเพิ่มวัตถุที่ซ้ำกันเรียกร้องให้วิธีการแล้วชุดยังคงไม่เปลี่ยนแปลงและผลตอบแทนpublic boolean add(Object o)
false
เช่น:
[โลกเป็นดี]
คุณตอบคำถามของคุณเองแล้ว - แฮชเซทไม่อนุญาตค่าที่ซ้ำกัน มันจะไม่สำคัญที่จะสร้าง hashset โดยใช้ hashmap สำรอง (และเพียงตรวจสอบเพื่อดูว่ามีค่าอยู่แล้ว) ฉันเดาว่าการใช้งานจาวาที่หลากหลายทำเช่นนั้นหรือใช้โค้ดที่กำหนดเองเพื่อให้มีประสิทธิภาพมากขึ้น
java.util.HashSet
java.util.HashMap
โดยทั่วไปใน HashMap ผู้ใช้จะต้องให้ทั้งคีย์และค่าในขณะที่ใน HashSet ที่คุณให้เฉพาะค่าคีย์จะได้รับโดยอัตโนมัติจากค่าโดยใช้ฟังก์ชันแฮช ดังนั้นหลังจากมีทั้งคีย์และค่า HashSet สามารถเก็บเป็น HashMap ภายในได้
HashSet และ HashMap ทั้งคู่เก็บความแตกต่างอยู่ใน HashMap คุณสามารถระบุคีย์ขณะที่ใน HashSet คีย์นั้นมาจากรหัสแฮชของวัตถุ
HashMaps
อนุญาตหนึ่งคีย์ null และค่า null ไม่ได้ซิงโครไนซ์ซึ่งเพิ่มประสิทธิภาพ หากจำเป็นคุณสามารถทำให้ข้อมูลตรงกันได้โดยใช้Collections.SynchronizedMap()
Hashtables
ไม่อนุญาตให้ใช้ปุ่ม null และทำให้ข้อมูลตรงกัน
HashMap เป็นการใช้งานแผนที่อินเทอร์เฟซ HashSet เป็นการใช้งานของตั้งค่าอินเทอร์เฟซ
HashMap จัดเก็บข้อมูลในรูปแบบของคู่ค่าคีย์ HashSet Store เฉพาะวัตถุ
วิธีใส่ใช้เพื่อเพิ่มองค์ประกอบในแผนที่เพิ่มวิธีใช้เพื่อเพิ่มองค์ประกอบคือตั้งค่า
ในค่าแฮชโค้ดแฮชโค้ดจะถูกคำนวณโดยใช้วัตถุสำคัญที่นี่สมาชิกวัตถุจะใช้สำหรับการคำนวณค่าแฮชโค้ดซึ่งสามารถเหมือนกันสำหรับวัตถุสองรายการดังนั้นเมธอด equ () จะใช้ในการตรวจสอบความเท่าเทียมกันหากส่งคืนค่าเท็จ
HashMap เร็วกว่า hashset เนื่องจากมีการใช้คีย์เฉพาะเพื่อเข้าถึงวัตถุ HashSet ช้ากว่า Hashmap