Java เทียบเท่ากับพจนานุกรม Python


95

ฉันเป็นผู้ใช้ Python มาเป็นเวลานานและชอบวิธีการใช้พจนานุกรมมาก ใช้งานง่ายมากและใช้งานง่าย มี Java ที่ดีเทียบเท่ากับพจนานุกรมของ python หรือไม่? ฉันเคยได้ยินว่ามีคนใช้แฮชแมปและแฮชแท็ก ใครช่วยอธิบายความเหมือนและความแตกต่างของการใช้แฮชแท็กและแฮชแมปกับพจนานุกรมของ python ได้ไหม

คำตอบ:


108

dictคลาสของ Python คือการนำสิ่งที่เอกสาร Python เรียกอย่างไม่เป็นทางการว่า " mapping types " ภายในdictจะดำเนินการโดยใช้แฮชแท็ก

HashMapคลาสของ Java เป็นการใช้งานMapอินเทอร์เฟซ ภายในHashMapจะดำเนินการโดยใช้แฮชแท็ก

มีความแตกต่างเล็กน้อยในไวยากรณ์และฉันเชื่อว่าการใช้งานได้รับการปรับแต่งให้แตกต่างกันเล็กน้อย แต่โดยรวมแล้วสามารถใช้แทนกันได้อย่างสมบูรณ์


42
ไม่มีตัวอย่างให้ :(
Kamran Bigdely

1
@kami: อยากได้ตัวอย่างแบบไหน?
Daniel Pryden

5
ตัวอย่างใด ๆ ที่แสดงให้เห็นถึงการทำงานของพจนานุกรมของ python ที่เทียบเท่ากับ java คำตอบที่เป็นประโยชน์ ได้แก่ ตัวอย่างเนื่องจากคนส่วนใหญ่มาที่นี่เพื่อดูตัวอย่างและใช้ในโค้ดของตน
Kamran Bigdely

14
@kami: ไม่คิดว่าจะถูก คำถามไม่ได้ถามว่า "โค้ด Java ที่เทียบเท่ากับโค้ด Python บางตัวคืออะไร" ในความเป็นจริงคำถามไม่มีรหัสใด ๆ เลย ฉันไม่แน่ใจว่าการเพิ่มตัวอย่างการใช้ Map API ใน Java มีค่าเท่าใด คำตอบนี้เชื่อมโยงไปยังเอกสารตามรูปแบบบัญญัติ หากคุณต้องการเรียนรู้ Java ให้เริ่มด้วยบทช่วยสอนไม่ใช่ Stack Overflow ฉันไม่คิดว่าคำตอบนี้รับประกันการลดคะแนนเพียงเพราะไม่มีตัวอย่างโค้ดที่คัดลอกวางได้
Daniel Pryden

4
เสียใจที่ได้อ่านความคิดเห็นที่ระบุว่า "คนส่วนใหญ่มาที่นี่เพื่อดูตัวอย่างและใช้ในโค้ด " ฉันหวังว่านี่จะไม่ถูกต้อง
0xc0de

31

ความคิดของพจนานุกรมและแผนที่คล้ายกัน ทั้งสองมีองค์ประกอบเช่น

key1:value1, key2:value2 ... and so on

ใน Java Mapมีการใช้งานวิธีต่างๆเช่นHashMapหรือTreeMapอื่น ๆput(), get()การดำเนินการจะคล้ายกัน

import java.util.HashMap;

Map map = new HashMap();
// Put elements to the map
map.put("Ram", new Double(3434.34));
map.put("Krishna", new Double(123.22));
map.put("Hary", new Double(1378.00));
//to get elements
map.get("Krishna"); # =123.22
map.get("Hary"); # = 1378.00 

ดูเอกสาร HashMap ใน java8 https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html


5

เท่าที่ฉันทราบ (ฉันไม่ได้ใช้จาวาจริงๆ) พจนานุกรมเป็นเพียงชื่ออื่นสำหรับแฮชแมป / แฮชแท็ก

รหัสการจับจากhttp://www.fluffycat.com/Java/HashMaps/ดูเหมือนว่าจะใช้ในลักษณะที่คล้ายกันมากโดยมี java boiler-plate เพิ่มเติมเล็กน้อย


3
Java ยังมีอินเทอร์เฟซพจนานุกรมที่ใช้งานโดย Hashtable โดยทั่วไปควรใช้ HashMap
Michael Myers

1
@ Michael Myers: เลิกใช้พจนานุกรมแล้ว Oracle แนะนำให้ใช้ Map แทนdocs.oracle.com/javase/7/docs/api/java/util/Dictionary.html
Broken_Window

5

ความแตกต่างอย่างหนึ่งระหว่างทั้งสองคือdictมีข้อกำหนดที่เข้มงวดมากขึ้นเกี่ยวกับประเภทข้อมูลที่สามารถทำหน้าที่เป็นคีย์ได้ Java จะอนุญาตให้อ็อบเจ็กต์ใด ๆ ทำงานเป็นคีย์ - แม้ว่าคุณควรดูแลเพื่อให้แน่ใจว่าhashCode()เมธอดของอ็อบเจ็กต์ส่งคืนค่าที่ไม่ซ้ำกันซึ่งสะท้อนถึงสถานะภายในของอ็อบเจ็กต์ งูใหญ่ต้องใช้กุญแจเพื่อให้พอดีกับความหมายของhashableซึ่งระบุว่ารหัสกัญชาของวัตถุไม่ควรเปลี่ยนแปลงตลอดอายุการใช้งาน


1
นี่เป็นเรื่องจริง แต่ไม่ได้บังคับใช้กับภาษาใดภาษาหนึ่ง เห็นได้ชัดว่าในhashCode()เมธอดJava หรือวิธี Python __hash__()คุณควรพยายามส่งคืนค่าเฉพาะที่สะท้อนสถานะภายใน ไม่ว่าจะใน Java หรือ Python หากคุณมีอ็อบเจกต์ที่ไม่แน่นอนอาจเป็นคีย์ที่ไม่สามารถแฮชได้ดังนั้นจึงเป็นเรื่องที่สมเหตุสมผลที่จะทิ้งข้อยกเว้นจากhashCode()or __hash__()method
Daniel Pryden

1
จากประสบการณ์ของฉันเกือบทุกอย่างใน Python อาจเป็นคีย์ dict ... อะไรคือ 'ข้อกำหนดที่เข้มงวดกว่า'
Ron Kalian
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.