Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.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 SQLite查询与列表行上“in set”图标的List.contains()相比的速度/代价_Java_Android - Fatal编程技术网

Java SQLite查询与列表行上“in set”图标的List.contains()相比的速度/代价

Java SQLite查询与列表行上“in set”图标的List.contains()相比的速度/代价,java,android,Java,Android,我正在开发的一个应用程序要求主应用程序提供本地图书馆中的物品(比如书籍)列表。用户可以访问他们的本地图书库,并使用远程web服务搜索图书。该应用程序将通过此web服务了解该应用程序的其他用户,用户可以浏览其图书馆中其他用户的图书列表。每本书都由一个表示为int的唯一bookId标识 当查看通过搜索结果返回的图书或查看其他用户的图书库时,单个列表行单元格需要直观地表示图书是否在用户的本地库中。用户在库中最多可以有5000本书,存储在设备上的SQLite中,并与远程web服务同步 我的问题是,要确定

我正在开发的一个应用程序要求主应用程序提供本地图书馆中的物品(比如书籍)列表。用户可以访问他们的本地图书库,并使用远程web服务搜索图书。该应用程序将通过此web服务了解该应用程序的其他用户,用户可以浏览其图书馆中其他用户的图书列表。每本书都由一个表示为int的唯一bookId标识

当查看通过搜索结果返回的图书或查看其他用户的图书库时,单个列表行单元格需要直观地表示图书是否在用户的本地库中。用户在库中最多可以有5000本书,存储在设备上的SQLite中,并与远程web服务同步

我的问题是,要确定列表行中显示的图书是否在用户的库中,是否最好通过SELECT COUNT*…直接询问SQLite。。。或者在内存中维护包含唯一bookIds的某种列表或int[]数组

那么,在每一行显示上,我是查询SQLite还是检查List或int[]数组是否包含唯一的bookId?因为用户最多可以有5000本书,所以每个bookId占用4个字节,因此最多需要20kB

考虑到这一点,并在输入这一点时,我显然认为,与查询SQLite相比,如果我维护库内bookIds的列表或int[]数组,性能会更好。维护int[]数组的唯一警告是,如果添加或删除书籍,我需要手动增大或缩小数组,因此,有了这个选项,我很可能会使用ArrayList或Vector,尽管我不确定使用整数对象而不是原语会带来额外的内存开销


意见、想法、建议?

你会得到很多:写一个快速测试并测量


不过,也就是说,“内存中”搜索可能会胜过“磁盘上”搜索。

首先,对于纯内存解决方案,我可能会使用or。它应该为/提供更好的性能。其次,SQLite有它自己的,所以您不应该假设它每次都会天真地从磁盘读取数据。

您的程序将同时运行多少个实例?使用SQLite的一个重要优点是,如果程序的多个副本都访问相同的磁盘数据库,那么它们将获得相同的结果。如果维护内存中的副本,则需要担心同步问题

SQLite已经提供了重要的缓存。几乎可以肯定,内存中的数据库将运行得更快。但这里有一个重要的问题,这真的重要吗


您还将发现调试定制的内存写入解决方案更加困难。如果您使用sqlite,您可以使用命令行工具来帮助调试数据库。

我想写的是,我可能应该做一个测试,但周末我在家,没有任何访问权限,但您是对的!这当然是知道哪一个更好的绝对最好的方法,但我希望我的问题能够由其他人先前的经验或直觉充分回答。谢谢你的回复!您总是可以创建一个内存中的SQLite表,并对其执行查询。