如何移动列表条目同时更新所有条目的索引?

时间:2014-06-24 00:46:56

标签: java grails data-structures groovy gorm

我需要使用Java / Grails GORM应用程序执行以下操作。

我有一个域类项目:

class Item {

   int position
   String name

}

当我创建项目列表时,我可以更新位置属性,使其表示列表中每个项目的索引:0,1,2,3,...每个位置都是唯一的,即在每个位置只能是一个项目。

它应该能够改变项目的顺序。我们假设我有以下项目清单和位置:

A1, A2, A3, A4, A5
1   2   3   4   5 

当我希望A4在第2位时,我必须分别更新A2,A3的位置。这意味着我必须更新三个数据库条目A4,A2和A3。如果列表很长,那么还有很多更新要做。

  1. 是否存在处理列表元素重新定位的数据结构?
  2. 如何有效更新商品?

2 个答案:

答案 0 :(得分:0)

由于您的int position将始终有序,您可以忘记这一点,并使用数据结构的索引来获取您的位置。 (只需加1,因为索引从0开始)。使用LinkedList<String>ArrayList<String>。它们几乎是相同的 - 无论哪种方式,你都会有某种类型的O(n)操作。你将无法绕过列表。

this post提供了一个非常全面的摘要,而不是详细介绍每个数据结构的效率。

答案 1 :(得分:0)

听起来您需要一种方法来识别网络中的列表项。 您是否考虑过使用UUID而不是列表索引对元素进行处理? 这样,当列表的顺序发生变化时,您不必修改元素的ID。 您可以通过调用

获取新的UUID
UUID.randomUUID()

对于自动排序元素,这是列表的主要职责之一。如果您没有列表,则元素将需要彼此了解才能更新索引值,这可能会导致嵌入式链接列表的实现。