有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如果我必须在大量数据上实现二进制搜索,我应该使用什么样的数据类型?

编辑:好的,我的问题已经回答了。非常感谢。最初我对使用一百万数组有疑问,因为我读到它在C语言中引起了一些问题,所以感谢大家的回复

好的,大家好,我有一个学校作业,我必须编写一个二进制搜索代码,在一组可能高达100万的数据中搜索一段数据

我计划只使用数字,所以二进制搜索本身应该很容易。数据将是大量随机生成的数字(排序)到一个文本文件中,我计划让程序打开该文件并将所有数据加载到数组中

但是到目前为止,我只使用了几百个大小的数组我的问题是:声明一个100万的数组是否可行

如果数组大小为100万不现实,你们会有什么建议?我是否必须将数据拆分为多个文件,并使用较小的数组大小(例如10000)?或者除了数组之外,还有其他数据类型可以使用吗

非常感谢您的回复,谢谢

PS:我在用Java编写代码


共 (6) 个答案

  1. # 1 楼答案

    是的,数组大小为一百万是完全可行的。其他任何事情都会使事情变得过于复杂

  2. # 2 楼答案

    对于100万个数字,声明数组大小为100万就可以了。其他任何事情都会让事情变得不必要的复杂

    如果你有非常大的数据,那么你可以去分割数据,而不是排序和二进制搜索。但是100万看起来太复杂了

  3. # 3 楼答案

    如果要实现二进制搜索算法,可以考虑使用二进制搜索树。二叉树可以比数组更有效地进行搜索和排序

    维基百科关于二进制搜索树的文章:Binary Search Trees

  4. # 4 楼答案

    用于大型集合的数据结构在很大程度上取决于所使用的数据类型,在本例中,它是一个数字(可能是int)或类似的数字。Java中的基元数组只是变量大小乘以数组长度的内存块,就像在C中一样,因此如果您使用的是ints(4个字节)并且有一百万个字节,那么数组只需要使用4MB的内存,然后就可以使用Arrays.sort

    对于排序对象而不是原语的类似情况,答案将取决于许多变量,例如对象的大小以及它们是否位于数据库、平面文件等中

  5. # 5 楼答案

    您可以尝试使用二叉树

  6. # 6 楼答案

    可以设置的数组的最大大小为Integer.MAX_VALUE - 5。内存地址索引是32位的,并且有一个对象头+长度,所以它们仍然需要由32位索引寻址

    请参阅本帖stackoverflowquestion

    如果排序的数字在特定的值范围内,则可以参考此表

    字节:字节数据类型是一个8位有符号2的补码整数。它的最小值为-128,最大值为127(含)。字节数据类型对于在大型阵列中节省内存非常有用,而实际上节省内存很重要。它们也可以用来代替int,因为它们的限制有助于澄清代码;变量的范围是有限的这一事实可以作为文档的一种形式

    short:short数据类型是一个16位有符号2的补码整数。它的最小值为-32768,最大值为32767(含)。与byte一样,同样的准则也适用:在内存节省非常重要的情况下,可以使用short来在大型阵列中节省内存

    int:int数据类型是一个32位有符号2的补码整数。它的最小值为-2147483648,最大值为2147483647(含)。对于整数值,此数据类型通常是默认选择,除非有理由(如上所述)选择其他数据类型。此数据类型很可能足够大,足以容纳程序将使用的数字,但如果需要更大范围的值,请使用long

    long:long数据类型是一个64位有符号2的补码整数。其最小值为-9223372036854775808,最大值为9223372036854775807(含)。当需要比int提供的值更宽的值范围时,请使用此数据类型

    Src:java docs