खोज…


परिचय

एक SparseArray एक Map लिए एक विकल्प है। एक Map लिए वस्तुओं की कुंजी की आवश्यकता होती है। ऑटोबॉक्सिंग की घटना तब होती है जब हम कुंजी के रूप में एक आदिम int मान का उपयोग करना चाहते हैं। संकलक स्वचालित रूप से आदिम मूल्यों उनके बॉक्स्ड प्रकार के लिए (जैसे धर्मान्तरित int के लिए Integer )। मेमोरी फ़ुटप्रिंट में अंतर ध्यान देने योग्य है: int 4 बाइट्स का उपयोग करता है, Integer 16 बाइट्स का उपयोग करता है। SparseArray कुंजी मूल्य के रूप में int का उपयोग करता है।

टिप्पणियों

लाभ :

  • कम मेमोरी उपयोग (आदिम कुंजियों के कारण)।
  • कोई ऑटो-बॉक्सिंग नहीं।

हानि :

  • SparseArray बाइनरी वैल्यू फॉर फाइंड वैल्यू (O (लॉग एन)) का उपयोग करता है, इसलिए इसका सबसे अच्छा समाधान नहीं हो सकता है यदि इसमें बड़ी संख्या में तत्व (हैशपॉप का उपयोग करें) के साथ काम करना है।

परिवार के कई प्रकार हैं जैसे: -स्पर्सेअरे <Integer, Object> -SparseBooleanArray <Integer, Boolean> -SparseIntArray <Integer, Integer> -SparseLongArray <Integer, Long> -LongSparseArray, लॉन्ग-टाइम, ऑब्जेक्ट्स> >

SparseArray संचालन

  • एलिमेंट जोड़ने - put (int, x): निर्दिष्ट कुंजी से एक मैपिंग जोड़ता है, यदि कोई एक था, तो निर्दिष्ट कुंजी से पिछले मैपिंग की जगह। - परिशिष्ट (int, x): सरणी में एक कुंजी / मान जोड़ी देता है, उस मामले के लिए अनुकूलित करता है जहां कुंजी सरणी में सभी मौजूदा कुंजी से अधिक है। प्रदर्शन को अनुकूलित करने के लिए आपको अनुक्रमिक कुंजियों के मामले में परिशिष्ट () का उपयोग करना चाहिए। अन्यथा डाल () ठीक है।

  • हटाने तत्व - हटाएँ (int): यदि कोई था, तो निर्दिष्ट कुंजी से मैपिंग को हटा देता है। - removeAt (int): दिए गए इंडेक्स पर मैपिंग को हटाता है। - removeAtRange (int, int): एक बैच के रूप में मैपिंग की एक श्रृंखला निकालें।

  • एक्सेसिंग एलिमेंट - मिलता है (इंट): निर्दिष्ट कुंजी से इंट मैप किया जाता है, या 0 यदि कोई ऐसी मैपिंग नहीं की गई है। - प्राप्त करें (int, E): यदि कोई ऐसी मैपिंग नहीं की गई है, तो निर्दिष्ट कुंजी से इंट मैप किया जाता है, या निर्दिष्ट मूल्य प्राप्त होता है। - valueAt (int): 0 (आकार) (1) श्रेणी में एक इंडेक्स को देखते हुए, इंडेक्स की-वैल्यू मैपिंग से मान लौटाता है जो कि स्पार्सइंटरएयर स्टोर करता है। संकेत आरोही क्रम में दिए गए हैं।

  • index / key search - keyAt (int): 0 में किसी इंडेक्स को देखते हुए ... आकार () - 1, इंडेक्स की-वैल्यू मैपिंग से कुंजी देता है जो यह SparseIntArray स्टोर करता है। संकेत आरोही क्रम में दिए गए हैं। - valueAt (int): 0 (आकार) (1) श्रेणी में एक इंडेक्स को देखते हुए, इंडेक्स की-वैल्यू मैपिंग से मान लौटाता है जो कि स्पार्सइंटरएयर स्टोर करता है। संकेत आरोही क्रम में दिए गए हैं। - indexOfKey (int): वह इंडेक्स लौटाता है जिसके लिए keyAt (int) निर्दिष्ट कुंजी या नकारात्मक संख्या लौटाएगा यदि निर्दिष्ट कुंजी मैप नहीं की गई है। - indexOfValue (E): वह इंडेक्स लौटाता है जिसके लिए valueAt (int) निर्दिष्ट कुंजी या नकारात्मक संख्या लौटाएगा यदि कोई मान निर्दिष्ट मान के लिए मैप नहीं करता है। खबरदार है कि यह एक रेखीय खोज है, कुंजी द्वारा लुकअप के विपरीत, और यह कि कई कुंजियाँ समान मान पर मैप कर सकती हैं और यह उनमें से केवल एक को खोजेगी। उनकी मेमोरी फ़ुटप्रिंट में अंतर ध्यान देने योग्य है: int 4 बाइट्स का उपयोग करता है, इंटेगर 16 बाइट्स का उपयोग करता है। SparseArray int का उपयोग मुख्य मूल्य के रूप में करता है।

SparseArray का उपयोग करके मूल उदाहरण

class Person {
    String name;

    public Person(String name) {
        this.name = name;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Person person = (Person) o;

        return name != null ? name.equals(person.name) : person.name == null;
    }

    @Override
    public int hashCode() {
        return name != null ? name.hashCode() : 0;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                '}';
    }
}

final Person steve = new Person("Steve");
Person[] persons = new Person[] { new Person("John"), new Person("Gwen"), steve, new Person("Rob") };
int[] identifiers = new int[] {1234, 2345, 3456, 4567};

final SparseArray<Person> demo = new SparseArray<>();

// Mapping persons to identifiers.
for (int i = 0; i < persons.length; i++) {
    demo.put(identifiers[i], persons[i]);
}

// Find the person with identifier 1234.
Person id1234 = demo.get(1234); // Returns John.

// Find the person with identifier 6410.
Person id6410 = demo.get(6410); // Returns null.

// Find the 3rd person.
Person third = demo.valueAt(3); // Returns Rob.

// Find the 42th person.
//Person fortysecond = demo.valueAt(42); // Throws ArrayIndexOutOfBoundsException.

// Remove the last person.
demo.removeAt(demo.size() - 1); // Rob removed.

// Remove the person with identifier 1234.
demo.delete(1234); // John removed.

// Find the index of Steve.
int indexOfSteve = demo.indexOfValue(steve);

// Find the identifier of Steve.
int identifierOfSteve = demo.keyAt(indexOfSteve);

YouTube पर ट्यूटोरियल



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow