【问题标题】:Collection / map that supports order, inserts, and lookup by both index and key支持按索引和键排序、插入和查找的集合/映射
【发布时间】:2015-02-12 05:09:27
【问题描述】:
在 Java (Android) 中,我有一堆由唯一日期键入的记录。它们也根据增加的日期进行排序。用户应添加到此集合中。
我需要做到以下几点:
- 直接按日期查找这些记录
- 直接按索引查找这些记录
- 在任意位置(包括两个现有记录之间)插入一条新记录(具有唯一日期),从而调整所有受影响记录的索引。
一些实现细节--
这些记录将按日期升序排列(最新在最后)。
这些记录也将在 Android ListView 中以相反的顺序(最新日期在顶部)显示,因此需要非线性、直接访问索引。
这些记录也将根据数据库中可能存在或不存在的日期绘制,因此需要按日期直接查找。
我无法找到满足这些要求的现有解决方案。
最好的方法是什么?
【问题讨论】:
标签:
java
android
date
arraylist
map
【解决方案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();