Android SparseArray<SparseArray <Object >> инициализация
Я должен реализовать классификацию чего-то вроде Hashmap с двумя ключами и значением, скажем, Hashmap<K1, K2, V>
где два ключа являются целыми числами, а значение является общим MyObject, определенным мной.
Я прочитал это, это и это сообщение, и я также знаю, что проект guava предлагает интерфейс таблицы, но я не хочу использовать внешние библиотеки (если не строго необходимо), чтобы мой проект был как можно меньше. Поэтому я решил использовать SparseArrays: я подумал, что это лучший выбор, потому что мои ключи int и не обязательно начинаются с нуля и увеличиваются.
Я делаю это инициализация:
SparseArray<SparseArray<MyObject>> myObjectSparseArray = new SparseArray<SparseArray<MyObject>>();
Теперь давайте перейдем к делу. Могу ли я сделать такую операцию:
MyObject myObject = new MyObject();
myObjectSparseArray.get(3).put(2,myObject);
или я должен сделать что-то вроде:
MyObject myObject = new MyObject();
myObjectSparseArray.put(3, new SparseArray<MyObject>());
myObjectSparseArray.get(3).put(2,myObject)
Другими словами: я инициализирую оба SparseArrays этой единственной строкой?
SparseArray<SparseArray<MyObject>> myObjectSparseArray = new SparseArray<SparseArray<MyObject>>()
Как вы думаете, есть лучшие реализации для моего случая?
2 ответа
Если у вас есть два ключа и одно значение, я бы просто использовал обычный HashMap
или же SparseArray
и объединит эти два ключа в одно значение. Допустим, у вас есть один ключ, который String
и тот, который Long
поэтому ключ вашей карты будет:(strKey + longKey).hashCode()
, Вы можете использовать его как Integer
и сохранить его в SparseArray
или как String
и использовать HashMap
,
Буксируя гнездо SparseArray
против цели иметь SparseArray
во-первых, так как вы будете выделять новый SparseArray
для каждого уникального первого ключа в вашем key
пар.
Хорошим решением для этого было бы использование hashmap и использование ключевого объекта, который принимает два значения типа int (например,Point), или определяемого вами объекта, который просто содержит два ключа.