2014-12-13 10 views
1

В Java (Android) у меня есть куча записей, которые связаны с уникальными датами. Они также сортируются по возрастанию. Пользователь должен добавить в эту коллекцию.Коллекция/карта, поддерживающая порядок, вставки и поиск по индексу и ключу

мне нужно сделать быть в состоянии сделать следующее:

  1. просмотровых этих записей непосредственно по дате
  2. просмотра этих записей непосредственно по индексу
  3. Вставка новой записи (с уникальной датой) в любом месте, в том числе между двумя существующими записями и, таким образом, корректировка индексов всех затронутых записей.

Некоторые детали реализации -

Эти записи будут отсортированы в порядке возрастания по дате (новые в конце).

Эти записи также будут отображаться в обратном порядке (новейшая дата вверху) в Android ListView, поэтому необходим нелинейный прямой доступ к индексу.

Эти записи также будут построены на основе даты, которая может или не может существовать в базе данных, поэтому необходим прямой поиск по дате.

Я не смог найти существующее решение, отвечающее этим требованиям.

Каков наилучший способ для этого?

+6

Просто обернуть 'TreeMap' в класс твоих – fge

ответ

1

Я не думаю, что для этого существует существующая коллекция. Я хотел бы использовать TreeMap для записей:

Map<Date, MyRecord> records = new TreeMap<Date, MyRecord>(Collections.reverseOrder()); 

Всякий раз, когда вы хотите добавить к карте или поиска по дате, просто используйте карту обычным способом.

Однако, я не думаю, что вам действительно нужен поиск по методу индекса, чтобы отображать ваши записи в ListView с новейшими сверху. Все, что вам нужно, это List<MyRecord> и ArrayAdapter экземпляр с помощью

new ArrayAdapter(context, resourceId, list); 

Всякий раз, когда ListView необходимо обновить использовать код:

list.clear(); 
list.addAll(records.values()); // Because records is a TreeMap, values() will be in correct order. 
adapter.notifyDataSetChanged(); 
+0

Он работает очень Что ж! Спасибо и @fge. – Alchete