2012-09-15 13 views
30

मैं एक HashMap<Integer, Bitmap> का उपयोग कर एक बिटमैप कैश को लागू किया गया था और ग्रहण में निम्न चेतावनी प्राप्त किया:SparseArray, देखें कि क्या कुंजी मौजूद है

उपयोग नई SparseArray (...) बेहतर प्रदर्शन के लिए के बजाय।

मुझे लगता है कि कक्षा से पहले कभी नहीं सुना है, लेकिन यह निरीक्षण यह एक containsKey() विधि है जो मैं कैश से एक बिटमैप की बहाली पर फोन किया गया था अगर यह कैश में मौजूद है की जाँच करने के लिए नहीं लगता है, और यदि ऐसा नहीं होता है, तो इसे जोड़ें।

यह जांचने के लिए सबसे अच्छा तरीका है कि कुंजी पहले से मौजूद है या नहीं?

मुझे लगता है कि मैं इस अधिभार का उपयोग करने के लिए कोड बदल सकता हूं और शून्य की जांच कर सकता हूं?

Bitmap bitmap = cache.get(key, null); 

उत्तर

39

आप इस्तेमाल कर सकते हैं:

Bitmap bitmap = cache.get(key, null); 

लेकिन समझते हैं कि यह एक ही get(key) प्रकार है: करने के लिए

Bitmap bitmap = cache.get(key); 

सबसे अच्छा तरीका है get(key, default) उपयोग करने के लिए एक सामान्य डिफ़ॉल्ट मामले प्रदान करना है, कुछ जब कोई कुंजी नहीं मिलती है तो मान्य विकल्प है।

लेकिन if(get(key) != null) का उपयोग के त्वरित प्रतिस्थापन के रूप में नहीं करने का कोई अच्छा कारण नहीं है।

+0

धन्यवाद सैम, अधिभार पर अच्छी जगह, मैं बस अगर (get (key)! = Null) के साथ प्रतिस्थापन के अपने सुझाव के साथ चला गया है। – magritte

1

documentation से उद्धरण।

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

आप get(int) का उपयोग कर सकते हैं जो कुंजी नहीं मिलने पर शून्य को वापस कर देगा। पसंद;

बिटमैप बिटमैप = cache.get (कुंजी);

+0

कुंजी के पास शून्य कोड हो सकता है, उस स्थिति में आपके कोड के साथ आप यह निर्धारित करने में सक्षम नहीं होंगे कि कुंजी मौजूद है या नहीं। यानी यदि कुंजी मौजूद नहीं है तो यह शून्य हो जाएगी और यदि कुंजी शून्य मान है तो यह भी शून्य हो जाएगी। indexOfKey इस मामले में उपयोगकर्ता होना चाहिए (एलेक्स का जवाब देखें) – user1991679

+0

@ user1991679 काफी पुराना उत्तर और आप जो सुझाव देते हैं वह मुझे नए एपिस के माध्यम से लगता है। हालांकि आपकी टिप्पणी का जवाब है, int primitive शून्य नहीं हो सकता है। – auselen

+0

मुझे समझ में नहीं आता कि कैसे तथ्य यह है कि आदिम मेरी टिप्पणी से संबंधित नहीं हो सकता है। बीटीडब्ल्यू, इंडेक्सऑफकी को एपीआई 1 में पेश किया गया था। – user1991679

26

इसलिए आपका मूल्य विभिन्न परिस्थितियों में शून्य हो सकता है, मैं indexOfKey(int key) का उपयोग करने का सुझाव देता हूं यहां indexOfKey(int key) संदर्भ है।

तो बस केवल नकारात्मक वापसी मान

if(mySparseArray.indexOfKey(int) < 0) { 
    //Item does not exist. Do something relevant 
} 
+0

क्या यह '.get' का उपयोग करने से बेहतर/खराब है? – Smar

1

SparseArray के कार्यान्वयन के लिए जा रहे हैं के लिए जाँच यह जवाबी सहज ज्ञान युक्त बेहतर प्रदर्शन (समय-जटिलता) HashMap से (कम अंतरिक्ष आवश्यकता के अलावा अन्य के लिए हो सकता है कि लगता है जो मोबाइल वातावरण के लिए समझ में आता है) चूंकि स्पैर्सएरे के प्राप्त() सदस्य बाइनरी-सर्च (ओ (लॉग एन) का उपयोग करते हैं) जबकि हैश मैप सरणी-इंडेक्सिंग (ओ (1) का उपयोग करता है)।

(के रूप में-है) दोनों वर्गों के लिए प्राप्त() विधि कार्यान्वयन प्रदान करना:

अशक्त है कि क्या उपयोग करने के लिए indexOfKey (key) < 0 या (key) प्राप्त करने के लिए == के रूप में अस्तित्व की जाँच के लिए
public V get(Object key) { // for HashMap 
    if (key == null) 
     return getForNullKey(); 
    int hash = hash(key.hashCode()); 
    for (Entry<K,V> e = table[indexFor(hash, table.length)]; 
      e != null; 
      e = e.next) { 
     Object k; 
     if (e.hash == hash && ((k = e.key) == key || key.equals(k))) 
      return e.value; 
    } 
    return null; 
} 

public E get(int key, E valueIfKeyNotFound) { //for SparseArray 
    int i = binarySearch(mKeys, 0, mSize, key); 

    if (i < 0 || mValues[i] == DELETED) { 
     return valueIfKeyNotFound; 
    } else { 
     return (E) mValues[i]; 
    } 
} 

स्पैर्सएरे में कुंजी की, कुछ ठीक है क्योंकि दोनों बाइनरी-सर्च का उपयोग करते हैं।

public int indexOfKey(int key) { // for SparseArray 
    if (mGarbage) { 
     gc(); 
    } 

    return binarySearch(mKeys, 0, mSize, key); 
} 
+1

मुझे समझ में नहीं आ रहा है कि प्रश्नों के आपके उत्तर से कनेक्शन कहां है। –

संबंधित मुद्दे