Sobes.tech
Middle

Androidте примитивдик типтерди кошуу мүмкүнчүлүгү бар карта бар. Бул тууралуу көбүрөөк айтып бере аласызбы?

sobes.tech AI

AIден жооп

Ооба, Android SDKда primitive түрлөрү менен иштөө үчүн атайын ишке ашырылуулар бар, алар стандарттуу HashMap<K, V> салыштырмалуу иштөө жана эс тутумду үнөмдөө үчүн оптималдаштырылган.

Көбүнчө колдонулган:

  • SparseIntArray: int ачкычтары жана int маанилери сакталат.
  • SparseLongArray: int ачкычтары жана long маанилери сакталат.
  • SparseBooleanArray: int ачкычтары жана boolean маанилери сакталат.
  • LongSparseArray<E>: long ачкычтары жана E түрүндөгү объекттер сакталат.

Бул класстардын колдонуу артыкчылыктары:

  • Эс тутумдун натыйжалуулугу: Алар ички массивдерди колдонуп, primitive түрлөрү үчүн объекттерди түзүүнүн чыгымдарын жана HashMap түзүмүн алдын алат.
  • Иштөө ылдамдыгы: Көбүнчө кошуу, алуу жана өчүрүү операциялары тезирээк болот, өзгөчө көп элементтер менен иштегенде, жөнөкөй ички түзүм жана SparseArray үчүн хештөө болбошу менен.

SparseIntArray колдонуу мисалы:

// SparseIntArray түзүү
SparseIntArray sparseArray = new SparseIntArray();

// Элементтерди кошуу
sparseArray.put(0, 100);
sparseArray.put(1, 200);
sparseArray.put(10, 300);

// Ключ боюнча маанини алуу
int value = sparseArray.get(1); // мааниси 200 болот

// Дефолт мааниси менен алуу
int valueWithDefault = sparseArray.get(5, -1); // мааниси -1 болот

// Элементти өчүрүү
sparseArray.delete(10);

// Элементтер боюнча өтүү
for (int i = 0; i < sparseArray.size(); i++) {
    int key = sparseArray.keyAt(i);
    int val = sparseArray.valueAt(i);
    // Логика иштетүү
}

Ошондой эле SparseLongArray, SparseBooleanArray жана LongSparseArray колдонулат. LongSparseArray объекттерди сактагандыктан, анын маанилери primitive эмес, объекттер.

Стандарттык HashMap жана атайын Sparse карталардын тандоосу талаптарга жараша:

  • Эгер кілттөр ар кандай объекттер же primitive түрлөрү болсо, HashMap колдонуңуз.
  • Эгер кілттөр int же long болсо жана маанилери primitive же объекттер болсо, LongSparseArray колдонуу артыкчылык берет.

Маанилүү: Sparse карталар потокко коопсуз эмес. Эгер потокко коопсуз ишке ашыруу керек болсо, primitive типтер үчүн обертки объекттери менен ConcurrentHashMap колдонуу каралат. Бирок, Android тиркемесинин UI агымында, бул структуралар көбүнесе колдонулуп жатканда, потокко коопсуздук маселе эмес.