मैं एक कस्टम हैश फ़ंक्शन लागू कर रहा हूं, अगर मुझे हैश मैप बाल्टी में कई टकराव मिलते हैं, तो मुझे कैसे पता चलेगा कि बाल्टी में कितने तत्व संग्रहीत किए जाते हैं?जावा हैशमैप पर टकराव की संख्या पर मीट्रिक कैसे प्राप्त कर सकता हूं?
उत्तर
एपीआई में इसके लिए कोई सीधा समर्थन नहीं है। सदस्य परिवर्तनीय table
, बाल्टी को संग्रहीत करने के लिए उपयोग किया जाता है, यहां तक कि सार्वजनिक भी नहीं है, इसलिए कक्षा को विस्तारित करने से आपको दूर नहीं मिलेगा।
मान लें कि आप हैश फ़ंक्शंस का मूल्यांकन कर रहे हैं और उत्पादन कोड में ऐसा नहीं कर रहे हैं, तो आप प्रतिबिंब का उपयोग करके इन बाधाओं को पारित कर सकते हैं।
मैं बाल्टी की सामग्री मुद्रित करने में कामयाब रहा। वितरण मेट्रिक्स का विश्लेषण करने के लिए इस बिंदु से कठिन नहीं होना चाहिए।
टेस्ट ड्राइवर: कोड यह
import java.lang.reflect.Field;
import java.util.*;
class Test {
public static void main(String[] args) throws Exception {
SubHashMap<String, Integer> map = new SubHashMap<String, Integer>();
map.put("zero", 0); map.put("one", 1); map.put("two", 2);
map.put("three", 3); map.put("four", 4); map.put("five", 5);
map.put("six", 6); map.put("seven", 7); map.put("eight", 8);
map.dumpBuckets();
}
}
SubHashMap:
class SubHashMap<K, V> extends HashMap<K, V> {
public void dumpBuckets() throws Exception {
Field f = HashMap.class.getDeclaredField("table");
f.setAccessible(true);
Map.Entry<K, V>[] table = (Map.Entry<K, V>[]) f.get(this);
Class<?> hashMapEntryClass = null;
for (Class<?> c : HashMap.class.getDeclaredClasses())
if ("java.util.HashMap.Entry".equals(c.getCanonicalName()))
hashMapEntryClass = c;
Field nextField = hashMapEntryClass.getDeclaredField("next");
nextField.setAccessible(true);
for (int i = 0; i < table.length; i++) {
System.out.print("Bucket " + i + ": ");
Map.Entry<K, V> entry = table[i];
while (entry != null) {
System.out.print(entry.getKey() + " ");
entry = (Map.Entry<K, V>) nextField.get(entry);
}
System.out.println();
}
}
}
आउटपुट:
Bucket 0:
Bucket 1: two
Bucket 2:
Bucket 3: seven five
Bucket 4:
Bucket 5:
Bucket 6:
Bucket 7: one
Bucket 8: three
Bucket 9:
Bucket 10:
Bucket 11: four
Bucket 12: zero
Bucket 13:
Bucket 14: eight
Bucket 15: six
यह निर्धारित करने के लिए कोई अंतर्निहित तरीका नहीं है कि टक्कर हुई है या नहीं। आपको जांच करना होगा कि कैसे संग्रह (हैश मैप) हैशकोड मान को बाल्टी में वितरित करता है और टकराव का ट्रैक रखने के लिए अपने आवेषणों की निगरानी करते हुए प्रक्रिया को दर्पण करता है।
प्रतिबिंब का उपयोग कर पहुंच प्रतिबंधों को पार कर सकता है। मेरा जवाब देखें – aioobe
आप हैश मैप की आंतरिक बाल्टी तक पहुंच प्राप्त करने के लिए कुछ प्रतिबिंबित कोड लिख सकते हैं और स्वयं का निरीक्षण कर सकते हैं।
- 1. मैप पर एनोटेशन की संख्या कैसे कम कर सकता हूं?
- 2. जावा हैशमैप
- 3. क्या मैं संख्या बेसक्लास पर अंकगणितीय परिचालन कर सकता हूं?
- 4. मैं मोबाइल/आईपैड पर e.offsetX कैसे प्राप्त कर सकता हूं
- 5. कैसे (एंड्रॉयड पर) अपठित जीमेल मेल की संख्या प्राप्त करने
- 6. हैशमैप
- 7. मैं आईओएस पर चेहरे की पहचान कैसे कर सकता हूं?
- 8. हैशमैप को हैशमैप
- 9. आर: मैं डेटा.फ्रेम की पंक्तियों पर आवेदन कैसे कर सकता हूं और $ column_name प्राप्त कर सकता हूं?
- 10. सी # में टेक्स्टबॉक्स में कर्सर की कॉलम संख्या कैसे प्राप्त कर सकता हूं?
- 11. मैं निर्देशिका में फ़ाइलों की संख्या को कुशलता से कैसे प्राप्त कर सकता हूं?
- 12. मैं अपनी टकराव को और अधिक ठोस कैसे प्राप्त कर सकता हूं?
- 13. मैं पीडीओ के साथ हटाई गई पंक्तियों की संख्या कैसे प्राप्त कर सकता हूं?
- 14. मैं प्रोग्राम पर अमेज़ॅन पर शीर्ष 100 बिक्री रैंकिंग आइटम कैसे प्राप्त कर सकता हूं?
- 15. जावा में हैशसेट टकराव
- 16. डायनेमोडीबी तालिका में आइटम की कुल संख्या कैसे प्राप्त कर सकता हूं?
- 17. "टकराव" की न्यूनतम संख्या प्राप्त करने के समय प्रक्रियाओं को कैसे प्रसारित करें
- 18. मैं लिनक्स पर उपलब्ध वायरलेस नेटवर्क की सूची कैसे प्राप्त कर सकता हूं?
- 19. मैं कमांड लाइन पर कल की तारीख कैसे प्राप्त और प्रारूपित कर सकता हूं?
- 20. मैं अपने एंड्रॉइड सिस्टम पर सभी सक्रिय कर्नेल ड्राइवरों की सूची कैसे प्राप्त कर सकता हूं?
- 21. मैं एंड्रॉइड पर एक्सपेंडेबल लिस्ट व्यू के समूह सूचक की चौड़ाई कैसे प्राप्त कर सकता हूं?
- 22. ट्विटर पर पोस्ट किए गए चौकोर चेकइन की स्थिति (लैट, लॉन) कैसे प्राप्त कर सकता हूं?
- 23. मैं जावा पृष्ठ पर रीडायरेक्ट कैसे कर सकता हूं और जावा में उस पृष्ठ पर वेरिएबल्स कैसे पास करूं?
- 24. मैं हैशमैप में तत्वों को कैसे पुन: सक्रिय कर सकता हूं?
- 25. मैं जावा में सीपीयूड कैसे प्राप्त कर सकता हूं?
- 26. जावा: मैं इनपुटस्ट्रीम से एन्कोडिंग कैसे प्राप्त कर सकता हूं?
- 27. मैं संग्रहित प्रक्रिया से प्रभावित रिकॉर्ड्स की संख्या कैसे प्राप्त कर सकता हूं?
- 28. मैं पाइथन फ़ंक्शन के तर्कों की संख्या कैसे प्राप्त कर सकता हूं?
- 29. रूबी भाषा में, मैं स्ट्रिंग में लाइनों की संख्या कैसे प्राप्त कर सकता हूं?
- 30. पर्ल में पीडीएफ फ़ाइल में पृष्ठों की संख्या कैसे प्राप्त कर सकता हूं?
बिल्कुल नहीं एक नकली लेकिन एक ऐसी ही पो सेंट http://stackoverflow.com/questions/3455457/java-hashmap-detect-collision –