![]() |
1
1
想想它需要多一般。对于像SQL这样真正普通的问题,解决方案看起来可能与一些非常具体的查询的解决方案不太一样。 在您展示它时,我倾向于避免使用二维字符串数组,而是创建一个集合——可能是一个数组列表,但是如果您经常进行插入和删除,那么LinkedList可能更适合某种结构类。所以
并使用哈希图为要搜索的字段编制索引:
把它写下来让我意识到这本身是不可能的,因为多个事物可能有相同的模式。所以可能是一个多映射——或者通过使映射的值类型不是虚构的,而是列表来滚动自己的值。 Google Collections 有一个很好的多映射实现。 |
![]() |
2
0
这并不能确切地回答你的问题,但是可以用JAVM内存中的所有表运行一些Java RDBMS。例如, HSQLDB . 这将为您提供SQL选择的全部功能,而无需磁盘访问开销。唯一的问题是,你不能像你所问的那样查询原始的Java数据结构。您首先必须将数据插入数据库的内存表中。 (我没试过这个……也许有人会评论这种方法是否真的可行。) |
![]() |
3
0
|
![]() |
4
0
编辑:我看了你的数组,我认为这绝对是RDBMS的工作。如果您想要像功能(快速/不需要数据库服务器)这样的内存数据结构,嵌入在像hsqldb这样的内存数据库中,h2可以提供这些功能。 如果您想要好的执行时间,您必须有一个好的数据结构。如果您只是无序地将数据存储在一个二维数组中,那么您将主要被困在O(N)中。
例如,您需要索引,就像其他RDBMS一样。例如,如果你经常使用
(如果示例代码中的guava api用法错误(它是伪代码),请原谅我!但是你明白了)。
在上面的代码中,您将进行一次O(1)的查找,然后进行另一次O(n)的查找,但要在更小的子集上进行。因此,这比对整个集合进行O(N)查找等更有效。如果使用的是按
因此,最后,如果我是您,我将定义自己的类,并使用JDK中可用的一些标准数据结构创建数据结构。如果这还不够,我可能会看一些其他的数据结构,但是如果它变得非常复杂,我想我只需要使用一些内存中的RDBM,比如hsqldb或h2。它们很容易嵌入,因此您的内存数据结构非常接近。随着越来越多的人做复杂的事情,这种选择很可能会提供更好的性能。 还请注意,我使用了 Google Guava 我的示例代码中的库..它们非常好,我强烈推荐使用它们,因为这样更好。当然,也不要忘记查看java.utli.collections包。 |
![]() |
5
0
最后我使用了一个查找表。90%的数据是从接近顶部的位置引用的。
它可以进一步优化,这样它就不会在所有数组中循环,而是在列上循环,直到找到匹配项,然后循环下一个,然后循环下一个。数据以流动且组织良好的方式进行布局,因此基于3个条件的查找只需进行与行等量的检查。 |
|
Johnny T · 基于当前值的SQL合并表[重复] 3 月前 |
![]() |
John D · 需要为NULL或NOT NULL的WHERE子句 4 月前 |
![]() |
ojek · 如何对SQL结果进行分组和编号? 4 月前 |
![]() |
senek · 如何在PL/SQL中将选择结果(列)放入数组中 4 月前 |
![]() |
Sax · 规范化Google表格(第一步) 4 月前 |
![]() |
Jatin · 检索卷计数的动态sql抛出错误语法错误[关闭] 4 月前 |
![]() |
Andrus · 如何在sql中查找第二个匹配项 4 月前 |