उत्कृष्ट सवाल!
सबसे पहले, @dasblinkenlight का उत्तर सही है, मान लीजिए, ज्यादातर समय। एक ऑब्जेक्ट कुंजी का निर्माण सबसे सीधे आगे और स्पष्ट समाधान है। समझने और काफी कुशलता के लिए यह आसान और स्पष्ट है। यदि यह कैश आपके आवेदन का हॉटस्पॉट नहीं है, तो कोई दूसरा विचार आवश्यक नहीं है।
हालांकि, विकल्प हैं, जो बेहतर दक्षता पैदा कर सकते हैं।
श्रेणीबद्ध देखने के लिए, कोई अतिरिक्त वस्तु आवंटन की जरूरत है लेकिन, , आप इसे दूसरी हैश टेबल एक्सेस के लिए व्यापार करते हैं। सबसे मेमोरी कुशल होने के लिए, कुंजी को सबसे छोटी मूल्य स्थान के साथ पहले रखना महत्वपूर्ण है।
Cache<Time, Value>[] month2ValueCache = new Cache<Time, Value>[12];
{
for (int i = 0; i < 12; i++) {
month2ValueCache[i] = new Cache<Time, Value>(...);
}
}
Value get(int month, Time, time) {
return month2ValueCache[month].get(time);
}
मैं एक किया:
यह आपके आवेदन की एक बहुत ही केंद्रीय स्थान है, तो और भी बेहतर दृष्टिकोण एक सरणी में, पहले देखने मंच, बारह महीनों रख दिया और स्टार्टअप पर यह प्रारंभ करने में है डेटफ्रैटर के साथ स्वरूपण तिथियों के लिए तुलना बेंचमार्क। यह आपके उपयोग के मामले के समान है। इसमें वास्तव में तीन प्रमुख घटक हैं: दिनांक, प्रारूप और लोकेल। आप इसे यहां पा सकते हैं: https://github.com/headissue/cache2k-benchmark/blob/master/zoo/src/test/java/org/cache2k/benchmark/DateFormattingBenchmark.java
मेरा परिणाम यह था कि वास्तव में यौगिक कुंजी के लिए ऑब्जेक्ट आवंटित करने के बीच बहुत अधिक रनटाइम अंतर नहीं है, या कुंजी के ऑब्जेक्ट आवंटन के बिना तीन स्तर कैश लुकअप नहीं है। हालांकि, प्रयुक्त बेंचमार्क ढांचा कचरे के संग्रह को सही ढंग से ध्यान में रखता नहीं है। मैं एक और बेंचमार्क ढांचे पर स्विच करने के बाद एक और गहन मूल्यांकन करूँगा।
समय और महीना .. mmhh, इसे किसी तारीख में संयोजित करने और अपनी नक्शा कुंजी बनाने के बारे में कैसे? –
"क्या ऐसा करने का एक बेहतर तरीका है" आप इस बारे में बुरा होने के लिए क्या समझते हैं? –
क्या आप उस कक्षा के उपयोग (ओं) के साथ उदाहरण दे सकते हैं जो आप करना चाहते हैं और इसके अलावा परिणाम (ओं)? (वास्तव में, मुझे यह समझने की ज़रूरत नहीं है कि आप क्या करना चाहते हैं।) – RyDroid