SparseArray
HashMap
जब कुंजी एक आदिम प्रकार है प्रतिस्थापित करने के लिए इस्तेमाल किया जा सकता है। विभिन्न कुंजी / मूल्य प्रकारों के कुछ संस्करण हैं, भले ही वे सभी सार्वजनिक रूप से उपलब्ध न हों।
लाभ हैं:
- आवंटन से मुक्त
- कोई बॉक्सिंग नहीं
कमियां:
- आम तौर पर धीमी, बड़े संग्रह के लिए संकेत नहीं दिया जाता है
- वे एक गैर-एंड्रॉइड प्रोजेक्ट में काम नहीं करेंगे
HashMap
निम्नलिखित द्वारा प्रतिस्थापित किया जा सकता है:
SparseArray <Integer, Object>
SparseBooleanArray <Integer, Boolean>
SparseIntArray <Integer, Integer>
SparseLongArray <Integer, Long>
LongSparseArray <Long, Object>
LongSparseLongArray <Long, Long> //this is not a public class
//but can be copied from Android source code
स्मृति के मामले में, यहाँ का एक उदाहरण है SparseIntArray
बनाम HashMap<Integer, Integer>
1000 तत्वों के लिए:
SparseIntArray
:
class SparseIntArray {
int[] keys;
int[] values;
int size;
}
कक्षा = 12 + 3 * 4 = 24 बाइट्स
सरणी = 20 + 1000 * 4 = 4024 बाइट्स
कुल = 8,072 बाइट्स
HashMap
:
class HashMap<K, V> {
Entry<K, V>[] table;
Entry<K, V> forNull;
int size;
int modCount;
int threshold;
Set<K> keys
Set<Entry<K, V>> entries;
Collection<V> values;
}
कक्षा = 12 + 8 * 4 = 48 बाइट्स
प्रविष्टि = 32 + 16 + 16 = 64 बाइट्स
सरणी = 20 + 1000 * 64 = 64024 बाइट्स
कुल = 64,136 बाइट्स
स्रोत: स्लाइड 90 से रोमेन गाई द्वारा एंड्रॉइड यादें ।
उपरोक्त संख्या JVM द्वारा ढेर पर आवंटित मेमोरी (बाइट्स में) की मात्रा है। वे उपयोग किए गए विशिष्ट JVM के आधार पर भिन्न हो सकते हैं।
java.lang.instrument
पैकेज के साथ एक वस्तु के आकार की जाँच जैसे उन्नत कार्यों के लिए कुछ उपयोगी तरीकों में शामिल है getObjectSize(Object objectToSize)
।
अतिरिक्त जानकारी आधिकारिक Oracle दस्तावेज से उपलब्ध है ।
कक्षा = 12 बाइट्स (एन उदाहरण चर) * 4 बाइट्स
ऐरे = 20 बाइट्स (एन तत्व) * (तत्व आकार)
प्रवेश = 32 बाइट्स + (प्रथम तत्व आकार) + (2 तत्व आकार)