मुझे इस एक http://onjava.com/pub/a/onjava/2003/08/20/memoization.html पता है लेकिन क्या कुछ और है?जावा में ज्ञापन के लिए विभिन्न तकनीकें क्या हैं?
उत्तर
Memoization भी सादा सरल typesafe जावा के साथ आसान है।
आप इसे निम्नलिखित पुन: प्रयोज्य वर्गों के साथ खरोंच से कर सकते हैं।
मैं इन्हें उन कैश के रूप में उपयोग करता हूं जिनकी उम्र वेबपैप पर अनुरोध है।
बेशक यदि आप एक बेदखल रणनीति या सिंक्रनाइज़ेशन जैसी अधिक सुविधाओं की आवश्यकता है तो गुवा MapMaker
का उपयोग करें।
यदि आपको कई पैरामीटर के साथ एक विधि को याद करने की आवश्यकता है, तो पैरामीटर को दोनों तकनीकों के साथ सूची में रखें, और उस सूची को एकल पैरामीटर के रूप में पास करें।
abstract public class Memoize0<V> {
//the memory
private V value;
public V get() {
if (value == null) {
value = calc();
}
return value;
}
/**
* will implement the calculation that
* is to be remembered thanks to this class
*/
public abstract V calc();
}
abstract public class Memoize1<P, V> {
//The memory, it maps one calculation parameter to one calculation result
private Map<P, V> values = new HashMap<P, V>();
public V get(P p) {
if (!values.containsKey(p)) {
values.put(p, calc(p));
}
return values.get(p);
}
/**
* Will implement the calculations that are
* to be remembered thanks to this class
* (one calculation per distinct parameter)
*/
public abstract V calc(P p);
}
और यह इस
Memoize0<String> configProvider = new Memoize0<String>() {
@Override
public String calc() {
return fetchConfigFromVerySlowDatabase();
}
};
final String config = configProvider.get();
Memoize1<Long, String> usernameProvider = new Memoize1<Long, String>() {
@Override
public String calc(Long id) {
return fetchUsernameFromVerySlowDatabase(id);
}
};
final String username = usernameProvider.get(123L);
अमरूद अभी तक हमारे पर्यावरण, वित्तीय सॉफ्टवेयर के लिए अनुमोदित नहीं है ... – ranv01
अमरूद अभी तक हमारे पर्यावरण के लिए स्वीकृत नहीं है। बैंकिंग सॉफ्टवेयर ... लेकिन यह करेगा। हालांकि मैमोरी लीक से बचने के लिए मैप के आकार को सीमित कर दूंगा। मुझे बेदखल करने की परवाह नहीं है क्योंकि यह केवल एक विधि के आविष्कार के दौरान संरक्षित होगा। – ranv01
मुझे पसंद है कि अत्यधिक परीक्षण कोड अनुमोदित नहीं है, लेकिन SO पर चिपका हुआ कुछ है :) –
हां। से caches का उपयोग करें।
उदाहरण:
import java.math.BigInteger;
import com.google.common.base.Preconditions;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
public class Fibonacci {
private static final LoadingCache<Integer, BigInteger> CACHE
= CacheBuilder.newBuilder().build(CacheLoader.from(Fibonacci::fib));
public static BigInteger fib(int n) {
Preconditions.checkArgument(n >= 0);
switch (n) {
case 0:
return BigInteger.ZERO;
case 1:
return BigInteger.ONE;
default:
return CACHE.getUnchecked(n - 1).add(CACHE.getUnchecked(n - 2));
}
}
}
मैपमेकर अब कैशबिल्डर के पक्ष में बहिष्कृत है: https://code.google.com/p/guava-libraries/wiki/MapMaker माइग्रेशन – dzieciou
@dzieciou मैंने आखिरकार कोड को अपडेट किया है जो नवीनतम गुवा (18.0 पर काम करता है) लेखन का वर्तमान समय)। और इस बार, यह परीक्षण किया गया है! –
की तरह प्रयोग किया जाता है पैरामीटर के बिना कार्यों memoize करने के लिए, अमरूद के Suppliers.memoize(Supplier)
का उपयोग करें। पैरामीटर के साथ कार्यों के लिए, पैरामीटर मान ऑब्जेक्ट्स के साथ CacheBuilder.build(CacheLoader)
का उपयोग कुंजी के रूप में करें।
- 1. क्या जावा कंपाइलर्स विभिन्न स्थानों के लिए अनुवादित हैं?
- 2. डेटाबेस विरासत के लिए तकनीकें?
- 3. सी # में एलियासिंग के लिए तकनीकें?
- 4. कैश, इलाके में डेटा रखने के लिए तकनीकें?
- 5. डेल्फी में ऑटोस्क्रोलिंग ज्ञापन
- 6. क्या किसी को पता है कि विंडोज यूआई के लिए गिटहब के पीछे तकनीकें क्या हैं?
- 7. ज्ञापन के लिए कार्यात्मक भाषाएं और समर्थन
- 8. पायथन में उपयोगकर्ता कोड एक्सटेंशन सक्षम करने के लिए प्रचलित तकनीकें क्या हैं?
- 9. एमएस एक्सेस एप्लिकेशन को .NET एप्लिकेशन में कनवर्ट करने के लिए कुछ अच्छी तकनीकें क्या हैं?
- 10. विभिन्न एपीआई स्तरों के लिए विभिन्न जावा विधियां
- 11. विभिन्न फाइबोनैकी कार्यान्वयन के लिए बिग-ओ
- 12. ज्ञापन आईओ समारोह?
- 13. सफारी डेस्कटॉप और आईओएस में स्मृति प्रोफाइलिंग के लिए तकनीकें?
- 14. जावास्क्रिप्ट में HTML स्ट्रिंग्स बनाने से बचने के लिए तकनीकें?
- 15. ईडीई में विभिन्न लक्ष्य प्रकार क्या हैं?
- 16. आप हास्केल में एक सामान्य ज्ञापन फ़ंक्शन कैसे करते हैं?
- 17. क्या jQuery ईवेंट हैंडलर डीबग करने के लिए टूल/तकनीकें हैं?
- 18. डब्ल्यूपीएफ में विभिन्न ट्रिगर्स क्या हैं?
- 19. विभिन्न भाषाओं के लिए आपकी पसंदीदा कंकाल फाइलें क्या हैं?
- 20. पायथन 3 के लिए स्टैंड अकेले निष्पादन योग्य बनाने के लिए कौन सी तकनीकें मौजूद हैं?
- 21. जावा में विभिन्न प्रकार के लिए एक सामान्य वर्ग के स्थिर सदस्य अलग-अलग हैं?
- 22. जावा प्रमाणीकरण के लिए विकल्प क्या हैं?
- 23. विभिन्न फाइलों में पायथन में कक्षाएं हैं?
- 24. क्लोजर में ब्लूम फ़िल्टर बनाने के दौरान उपयोग करने के लिए क्या हैशिंग तकनीकें?
- 25. AJAX स्ट्रीमलाइनिंग तकनीकें?
- 26. ज्ञापन, पुनरावर्ती फैक्टोरियल समारोह?
- 27. जावास्क्रिप्ट ज्ञापन स्पष्टीकरण?
- 28. रिकर्सिव फाइबोनैकी ज्ञापन
- 29. सुपर-फास्ट स्क्रीन स्क्रैपिंग तकनीकें?
- 30. कठिन, बेहतर, तेज, मजबूत ... छवि-आधारित कैप्चा के लिए तकनीकें?
यह उदाहरण प्रॉक्सी के माध्यम से ऑब्जेक्ट के सभी तरीकों पर ज्ञापन करता है। लेकिन उस समय सामान्य यादें एक समारोह है। जब आप ऑब्जेक्ट के सभी तरीकों को याद नहीं करना चाहते हैं तो वह प्रॉक्सी तकनीक परेशान होगी। – lacroix1547