我有一个时间轴活动,可以使用recyclerview显示用户状态。我正在使用firebase服务器和rxjava从数据库中获取数据。在我的时间线适配器中使用Array List,我将存储所有状态对象。我正在基于状态uid在我的时间轴活动中执行Insertions, Deletion and Updation
次操作。由于我使用的是数组列表,插入的时间复杂度为O(1),但对于删除和更新,时间复杂度为O(n)。如果有数千条记录,则执行Deletion and Updation
操作需要时间。为了提高我的时间复杂度,我使用了将存储状态uid和索引的Hashmap。如下面的代码
fun addStatus(status : Status?){
statusList.add(status)
statusMap.put("uid",status?.uid)
statusMap.put("index",statusList?.indexOf(status)?.toString)
notifyDataSetChanged()
}
使用HashMap,最坏情况下的时间复杂度有所改善,但在尝试从statusList中删除状态时也会出现一些问题。当我在我的arrayList中执行删除操作时,删除的对象旁边的剩余对象的索引将改变。它还迫使我更新剩余对象的HashMap索引。在最坏的情况下,如果有数百万条记录,HashMap将在O(1)中执行Update
操作,但Delete
操作将花费O(k)时间复杂度。
如何改进我的代码以在O(1)时间内执行所有三个操作,其他建议我在我的情况下最好的数据结构。谢谢