2012-07-23 6 views
11

मैं जावा सूची, सेट, या कुछ ऐसा ही देख रहा हूं जिसकी प्रविष्टि किसी समयावधि के बाद समाप्त हो गई है, लेकिन मुझे अभी तक कोई नहीं मिला है। मुझे अमरूद का CacheBuilder मिला है, जो मेरे उपयोग के लिए लगभग सही होगा, लेकिन यह सूची या सेट के बजाय एक मानचित्र है। क्या इस तरह से पहले से कुछ बाहर है, या अगर मैं इसका उपयोग करना चाहता हूं तो मुझे एक बनाना होगा?जावा समय की समाप्ति सूची/सेट?

+2

आपका उपयोग केस क्या है? – Bohemian

+0

मुझे एक केस केस देखने में कठिनाई हो रही है। आम तौर पर जब आप चीजों को कैश करना चाहते हैं, तो आपको कैश किए जाने वाले चीज़ों को पुनः प्राप्त करने के लिए एक कुंजी की आवश्यकता है, इसलिए प्रत्येक कैश कार्यान्वयन मानचित्र इंटरफ़ेस (या कुछ समान) के साथ क्यों काम करता है। – Matt

+0

आप अभी भी सेट –

उत्तर

0

चूंकि जावा हैशसेट कार्यान्वयन आंतरिक रूप से हैश मैप का उपयोग करता है, इसलिए कोड को कॉपी/संशोधित करना वास्तव में आसान होना चाहिए ताकि यह गुवा कैशबिल्डर का उपयोग कर सके।

public class HashSet<E> 
    extends AbstractSet<E> 
    implements Set<E>, Cloneable, java.io.Serializable 
{ 
    static final long serialVersionUID = -5024744406713321676L; 

    private transient HashMap<E,Object> map; 
... 

दूसरे शब्दों में, बस लागू अपने SetWithExpiration कुंजी की कुंजी से एक CacheBuilder नक्शे के रूप में। यह अंतर्निहित HashMap का उपयोग कर जावा HashSet कार्यान्वयन की तुलना में अधिक दक्षता खो देगा।

+3

इतना आसान नहीं है। 'हैशसेट' वर्ग का पुन: आविष्कार करना एक बुरा विचार है, और आप "हैशसेट को इसके बजाय कैशबिल्डर का उपयोग नहीं कर सकते हैं" – Bohemian

+0

हां, स्वच्छ कोड समाधान सार सार का विस्तार करना होगा और आंतरिक रूप से एक मानचित्र का उपयोग करें जो निर्भरता इंजेक्शन द्वारा पारित किया जाता है । –

5

समय समाप्त होने वाली सूची प्राप्त करने के लिए CacheBuilder का उपयोग करने के लिए, आप अपनी ऑब्जेक्ट्स को मानचित्र में कुंजियों और कुछ डमी ऑब्जेक्ट के रूप में मान सकते हैं।

+1

या अपनी वस्तुओं का उपयोग कुंजी और मूल्य के रूप में करें। बस सावधान रहें कि प्रत्येक डमी के लिए एक नई वस्तु न बनाएं, क्योंकि यह बर्बाद हो जाएगा। –