मुझे यह पता नहीं लगा सकता है कि मैंने LinkedHashMap और विवरण से (हालांकि बहुत रोचक) पढ़ा है, मुझे समझ में नहीं आया कि यह वास्तव में हुड के नीचे अपना काम कैसे करता है। एक साइड नोट के रूप में, मुझे पता है कि जावा में नीचे HashMap
काम करता है।
तो मैं स्रोत की समीक्षा करता हूं और अभी भी यह नहीं समझ सकता कि यह कैसे काम करता है। शायद मैं इस मामले में ओओपी में कुछ मौलिक समझ नहीं रहा हूं, इसलिए मेरे साथ बेकार है।
मुझे भ्रमित करने वाले भाग को संक्षेप में सारांशित करने के लिए निम्न है:
LinkedHashMap
सभी कॉल अपने माता-पिता HashMap
पर भेजता है।
आंतरिक यह HashMap.Entry
ओवरराइड करता है विभिन्न recordAccess
और recordRemoval
तरीकों जो LinkedHashMap
लेकिन वास्तविक Entries
के तर्क को लागू करने लगते हैं जो HashMap.Entry
और नहीं की की एक तालिका को दर्शाता है यानी HashMap
आधार वर्ग की तालिका के अंदर कर रहे हैं लागू करने के लिए LinkedHashMap.Entry
।
तो मैं यह नहीं समझ सकता कि विभिन्न recordAccess
और recordRemove
आदि वास्तव में कैसे कहा जा रहा है।
तो क्या कोई मुझे समझने में मदद कर सकता है कि यहां क्या हो रहा है?
क्या मुझे लगता है कि LinkedHashedMap.Entry
HashMap
द्वारा बनाई गई तालिका का प्रकार है? पर कैसे?ओओ मौलिक सिद्धांतों में वापस। LinkedHashMap हुड के नीचे कैसे काम करता है?
अद्यतन:
मेरा प्रश्न कैसे recordAccess
कहा जा रहा है करना है। HashMap
की एक व्युत्पन्न संस्करण का उपयोग कर इस पर मेरे प्रयोग Shengyuan लू के कारण (+1) के लिए असफल - मेरी खराब
अद्यतन:
जिसके बाद मैंने कोशिश की एक ही है (मुझे लगता है कि) के रूप में क्या LinkedHashMap
कर रही है:
package delete;
public class Base<T> {
Entry<T>[] table;
int idx = 0;
@SuppressWarnings("unchecked")
public Base(){
System.out.println("In base");
table = new Entry[10];
}
public void add(T x){
table[idx] = new Entry(x);
table[idx].doSomething();
}
static class Entry<T>{
T value;
Entry(T x){
this.value = x;
System.out.println("Entry::Base");
}
void doSomething(){
System.out.println("In Entry base, doing something");
}
}
}
public class Derived<T> extends Base<T> {
static class Entry<T> extends Base.Entry<T>{
Entry(T x) {
super(x);
System.out.println("In Entry derived");
}
int val;
@Override
void doSomething() {
System.out.println("In Entry derived doing something really smart!");
}
}
/**
* @param args
*/
public static void main(String[] args) {
Base<String> b = new Derived<String>();
b.add("Test string");
}
}
लेकिन यह प्रिंट:
In base
Entry::Base
In Entry base, doing something
तो व्युत्पन्न Entry
Nev है एर कहा जाता है।
क्या मेरा उदाहरण किसी भी तरह से अलग है? मुझे समझ में नहीं कर सकते कि यह कैसे के लिए LinkedHashMap
सुरक्षित या पैकेज निजी? – assylias
@assylias: _ के लिए अद्यतन ओपी – Cratylus
_ क्यों लिंक किया हैशैप मैप को हैश मैप लागू करता है मैप_ पढ़ता है [यह] (http://stackoverflow.com/q/2165204/1393766) – Pshemo