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 агымында, бул структуралар көбүнесе колдонулуп жатканда, потокко коопсуздук маселе эмес.