java - 支持按索引和键排序、插入和查找的集合/映射

标签 java android date arraylist dictionary

在 Java (Android) 中,我有一堆按唯一日期键控的记录。它们也根据增加的日期进行排序。用户将添加到此集合中。

我需要能够做到以下几点:

  1. 直接按日期查找这些记录
  2. 直接通过索引查找这些记录
  3. 在任何位置(包括两个现有记录之间)插入一条新记录(具有唯一日期),从而调整所有受影响记录的索引。

一些实现细节--

这些记录将按日期升序排列(最新的在最后)。

这些记录也会在 Android ListView 中倒序显示(最新日期在顶部),因此需要非线性直接访问索引。

这些记录也将根据数据库中可能存在或不存在的日期绘制,因此需要按日期直接查找。

我无法找到满足这些要求的现有解决方案。

完成此任务的最佳方法是什么?

最佳答案

我认为没有现成的集合。我会使用 TreeMap 作为记录:

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

每当您想添加到 map 或按日期查找时,只需以通常的方式使用 map 即可。

但是,我不认为您实际上需要通过索引方法查找才能在 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();

关于java - 支持按索引和键排序、插入和查找的集合/映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27461443/

相关文章:

Perl:在/Date/Manip.pm 处使用数字 lt (<) 中的未初始化值

java - 如何为 DB2 通用 JDBC 驱动程序设置套接字超时?

java - 错误 : Error inflating class fragment

java - 自定义注释处理器未运行

android - 如何在Gradle Android中更改MavenLocal路径

添加了 android:exported 但仍然出现错误 需要针对 Android 12 及更高版本的应用程序才能为 android:exported 指定显式值

android - 如何同时处理 OnTouchListener 事件和 OnClickListener 事件

java - 带有外部代码的方法 (Java)

r - 测量每天第一个和最后一个位置记录与 R 中动物之间的距离

json - 如何使用 JQ 从今天的日期减去 6 个月?