Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 存储和搜索数字组合的有效方法_Java_Sqlite - Fatal编程技术网

Java 存储和搜索数字组合的有效方法

Java 存储和搜索数字组合的有效方法,java,sqlite,Java,Sqlite,我有一个应用程序,可以生成唯一的数字组合,就像每个组合都是唯一的一样。我希望以一种方式存储这些组合,以便以后能够有效地检索一些随机组合 下面是一个组合示例 35 36 37 38 39 40 50 总共有约400万种组合 我应该如何存储数据,以便以后检索组合?由于您的组合是唯一的,并且您实际上没有对数字的查询条件,因此如何将它们存储在数据库中并不重要。只需将它们插入一些表中。要检索X个随机组合,只需执行以下操作: SELECT * FROM table ORDER BY RANDOM() LIM

我有一个应用程序,可以生成唯一的数字组合,就像每个组合都是唯一的一样。我希望以一种方式存储这些组合,以便以后能够有效地检索一些随机组合

下面是一个组合示例

35 36 37 38 39 40 50

总共有约400万种组合


我应该如何存储数据,以便以后检索组合?

由于您的组合是唯一的,并且您实际上没有对数字的查询条件,因此如何将它们存储在数据库中并不重要。只需将它们插入一些表中。要检索X个随机组合,只需执行以下操作:

SELECT * FROM table ORDER BY RANDOM() LIMIT X
见:

在SQLite中存储整数数组时:


我认为可能有不同的解决方案;在某种意义上:你真的必须存储所有这些组合吗

假设这些组合只是“随机的”——您可以使用一些(智能的)数学,对一些函数getCombinationFor(),如

public List getCombinationFor(长)
它使用固定的算法为每个传入输入创建唯一的结果

比如:

getCombinationFor(0):给出0 1 2 3 10 20 30

getCombinationFor(1):给出12341003040

以上当然很简单;根据您对这些序列的要求,您可能需要一些非常复杂的东西。但是:当然,您可以定义这样一个函数来返回某个范围内的一组固定数字的排列

重要的是:这个函数为每个输入返回一个唯一的列表;同样重要的是:给定某个序列,您可以立即确定用于创建该序列的编号

因此,与生成包含唯一序列的庞大数据集不同,您只需定义一个算法,该算法知道如何以确定性方式创建唯一序列。如果这对你有用的话,它完全可以让你从存储序列中解脱出来

编辑:我刚想起我在研究一些与这个问题/答案“接近”的东西。。。瞧

发送数据: 使用唯一索引。在唯一冲突异常中,只需重新排序并发送下一条记录

检索:
最简单的实现方法是:使用HashSet,向它输入随机数(max是数据库中的组合数-1),而HashSet.size()小于需要检索的记录数。使用hashSet中的数字作为记录(组合)的ID或rownums来选择数据:WHERE ID in(ids here).

您是根据什么进行检索的?@Azodious我只是随机检索,但我不想每次执行两次检索组合,所以您在数据库中有大约4mln个组合,并且希望检索相对较少数量的不同组合进行处理?为什么不将其列为整数列表?然后,要获得一个随机组合,您需要生成一个介于0和
list_length-1之间的随机整数:这是您的索引。@lexicore我认为像sqlite这样的自包含数据库可以做到,但我不确定要使用什么数据类型或数据库结构应该是什么我应该将每个组合存储为json,并使用VARCHAR作为datatype@user2650277这取决于您在查询中实际希望对组合执行的操作。如果你什么都不做,那么我会采取最简单的方法,将它们存储为逗号分隔的字符串。。。想想彩票号码。所以如果用户想要生成100个组合,可能会有重复。好吧,这完全取决于你打算花费的“数学”数量。我确信可以定义一些f(n),它创建一个基于n的随机值列表。最后你会得到一组有限的排列。你可以构造所有这些排列!我还更新了我的答案,添加了一个我以前的问题的链接。。。完全围绕这个话题。还有一个人认为他必须保存GBs的数据。。。直到告诉他可以使用一些聪明的数学,并避免所有这些。@ USER 265027 7,如果我可以问:如果你觉得我的输入有点帮助,请考虑我的链接问题。看到上面的-1真是太痛苦了;-)如果组合是唯一的,为什么需要哈希集呢?组合是唯一的,但随机选择的ID不是。因此,HashSet。
public List<Integer> getCombinationFor(long whatever)