我需要使用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。如果列表很长,那么还有很多更新要做。
答案 0 :(得分:0)
由于您的int position
将始终有序,您可以忘记这一点,并使用数据结构的索引来获取您的位置。 (只需加1,因为索引从0开始)。使用LinkedList<String>
或ArrayList<String>
。它们几乎是相同的 - 无论哪种方式,你都会有某种类型的O(n)操作。你将无法绕过列表。
this post提供了一个非常全面的摘要,而不是详细介绍每个数据结构的效率。
答案 1 :(得分:0)
听起来您需要一种方法来识别网络中的列表项。 您是否考虑过使用UUID而不是列表索引对元素进行处理? 这样,当列表的顺序发生变化时,您不必修改元素的ID。 您可以通过调用
获取新的UUIDUUID.randomUUID()
对于自动排序元素,这是列表的主要职责之一。如果您没有列表,则元素将需要彼此了解才能更新索引值,这可能会导致嵌入式链接列表的实现。