Java 如何设计适合自定义排序的数据结构?
表中有一些项目,我希望用户可以自己定义这些项目的种类。 所以我在表中添加了一个字段Java 如何设计适合自定义排序的数据结构?,java,database,Java,Database,表中有一些项目,我希望用户可以自己定义这些项目的种类。 所以我在表中添加了一个字段sortValue(Int),表可能 name sortValue Jack 3 Paul 1 April 30 Alic 25 我使用下面的代码来显示按使用定义排序的项目 Select name, sortValue from myTable order by sortValue 结果将是 name sortValue Paul 1 Jack
sortValue(Int)
,表可能
name sortValue
Jack 3
Paul 1
April 30
Alic 25
我使用下面的代码来显示按使用定义排序的项目
Select name, sortValue from myTable order by sortValue
结果将是
name sortValue
Paul 1
Jack 3
Alic 25
April 30
我发现很难通过数据结构改变这些项的顺序
例如:
我希望记录(name=Alic,sortValue=25)
位于第二位。我必须将记录更新为(name=Alic,sortValue=2)
结果将是
name sortValue
Paul 1
Alic 2
Jack 3
April 30
如果我需要记录
(name=April,sortValue=30)
下次在第二个位置,我发现我没有该记录的sortValue 您可以对sortValue
列使用浮点类型,因此您将始终有一个空间在其他两个列之间插入一个新值
# if record is between others
sortValue = (prevSortValue + nextSortValue)/2
# if record is last
sortValue = prevSortValue + 1
从理论上讲,当浮点精度用完时,可能会遇到与整数相同的问题。但实际上,这在很大程度上取决于您在其他人之间插入记录的频率。尤其是在同一条记录附近有很多插入项时
仅仅为了将新记录放在正确的位置而更新现有记录似乎效率很低,因为
update
的操作比insert
要昂贵得多,并且需要锁定记录,您不需要修改这些记录。您可以对sortValue
列使用浮点类型,因此,您将始终有一个空间在其他两个值之间插入新值
# if record is between others
sortValue = (prevSortValue + nextSortValue)/2
# if record is last
sortValue = prevSortValue + 1
从理论上讲,当浮点精度用完时,可能会遇到与整数相同的问题。但实际上,这在很大程度上取决于您在其他人之间插入记录的频率。尤其是在同一条记录附近有很多插入项时
仅仅为了将新记录放在正确的位置而更新现有记录似乎效率很低,因为
update
操作比insert
要昂贵得多,并且需要锁定记录,您不需要修改。您不能每次只交换两个值而不是创建一个新值吗?您不能每次只交换两个值而不是创建一个新值吗?这可以正常工作,但如果您想将某人的顺序更改为3,您现在必须找到现有的第二个和第三个条目,然后在(第2+3)/2.可以正常工作,前提是您可以轻松找到第2行和第3行(当然,您可以使用row_number()作为示例)。谢谢!还有更好的方法吗?相关的问题是如何为每个记录生成sortValue
的值。使用随机函数填充?或使用prevSortValue+10000.00填充新记录?这可以正常工作,但如果要将某人的顺序更改为3,则必须找到现有的第二个和第三个条目,然后在(第2+3)/2处插入这一行。如果您可以轻松找到第2行和第3行(当然,您可以使用row_number()作为示例),则工作正常。谢谢!还有更好的方法吗?相关的问题是如何为每个记录生成sortValue
的值。使用随机函数填写?或为新记录生成prevSortValue+10000.00?