在数组中查找数字的最佳实践是什么?

HellishHeat

..,魔鬼在这里发生了什么?

    int [] numbers1To9 = new int[]{1,2,3,4,5,6,7,8,9};
    System.out.println("one is here, true or false?: "+Arrays.asList(numbers1To9).contains(1));

输出:这里是一个,是真还是假?:false

亚兰

如果使用排序数组,或者将对未排序数组的排序操作视为“便宜”,则binarySearch可以将其视为一个不错的选择。它可以Lists直接与原始数组一起使用,避免了进一步的集合(例如的创建,并且可以标识存储所需键的位置(或其中一个)。结果,您可以识别其存在(隐式)和索引所在的位置。

您已经对数组进行了排序,因此在您的情况下无需这样做(使用此算法是一个优势)。请注意,在使用未排序的数组时,必须在Arrays.sort之前调用binarySearch以避免出现“未定义”的结果。


例如,如果您想知道值(1)是否存在:

    //Arrays.sort(numbers1To9);
    boolean found = (Arrays.binarySearch((numbers1To9), 1))>=0?true:false; //--> true

例如,如果您还希望获得值(2的排名,请执行以下操作

    //Arrays.sort(numbers1To9);
    int pos = Arrays.binarySearch((numbers1To9), 2); //-->1
    boolean found = pos>=0; //--> true

binarySearch如果找不到该元素,则只会返回负输出。如果找到的键重复,则无法保证指定键的哪个位置会返回。

无论如何,如果结果为>=0,则保证该数组包含数字,并且还保证所需的值存储在返回的索引中。


没有找到密钥时的结果有点有趣

如果找不到密钥,则显示的否定结果遵循以下逻辑:

(-(插入点)-1)插入点定义为将键插入数组的点:第一个元素的索引大于键;如果数组中的所有元素都小于指定的键,则为a.length这样可以保证,并且仅当找到密钥时,返回值才会> = 0。

因此,如果您尝试找到任何大于9的数字,则插入点将为numbers1To9.length -> 9因此,10INTEGER.MAX_VALUE将输出相同的位置:

int pos = Arrays.binarySearch((numbers1To9), 10);                // -(9)-1 --> pos=-10
    pos = Arrays.binarySearch((numbers1To9), Integer.MAX_VALUE); // -(9)-1 --> pos=-10

使用数字0时,插入点将为0随着1的增大,其在数组中的位置为0):

int pos = Arrays.binarySearch((numbers1To9), 0); // -(0)-1 --> pos=-1

为了查看binarySearch如何未排序的数组一起工作

    int [] numberUnsorted= new int[]{1,2,4,9,7,6,5,8,3};
    int pos = Arrays.binarySearch((numberUnsorted), 3); //--> pos = -3  (FAIL)
        pos = Arrays.binarySearch((numberUnsorted), 9); //--> pos = -10 (FAIL)
        pos = Arrays.binarySearch((numberUnsorted), 6); //--> pos = -4  (FAIL)

因此称他们为“不确定”是一个真正的王道千卡


请注意,binarySearch将是在数组中被排序的条件下查找
数组中数字的“最佳实践之一” 在其他情况下,如果未对数组进行排序,您可能会意识到对数组进行排序的复杂性,并决定不需要排序操作的另一种机制是更好的方法。这将取决于数组的类型,大小和值。在不知道搜索具体上下文的情况下,通常没有“最佳确定方法”

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在数组中查找元素的最佳方法是什么?

来自分类Dev

查找存储在数组列表中的对象的平均值的最佳方法是什么?

来自分类Dev

查找存储在数组列表中的对象的平均值的最佳方法是什么?

来自分类Dev

在数组中存储大量数据的最佳方法是什么?

来自分类Dev

Vuejs中mixin的最佳实践是什么?

来自分类Dev

在C ++中定义的最佳实践是什么?

来自分类Dev

从reducer中的数组中删除重复项的最佳实践是什么?

来自分类Dev

与API一起使用时,将Date对象存储在数据库中的最佳实践是什么

来自分类Dev

Fortran 函数返回数组时的最佳实践是什么?

来自分类Dev

在数组中查找特定数字?

来自分类Dev

Perl:在数组中查找数字范围

来自分类Dev

在数组中查找数组的有效方法是什么?

来自分类Dev

实体框架中多个“包含”的最佳实践是什么?

来自分类Dev

在CloudKit中获取CKReferences的最佳实践方法是什么?

来自分类Dev

在MVC中处理静态内容的最佳实践是什么

来自分类Dev

Matlab中浮点比较的最佳实践是什么?

来自分类Dev

MySQL中时区处理的最佳实践是什么?

来自分类Dev

在OData中执行“稳定分页”的最佳实践是什么?

来自分类Dev

在C#中处理异常的最佳实践是什么?

来自分类Dev

在wordpress中更改主机时配置的最佳实践是什么?

来自分类Dev

在JDBC中编写SQL查询的最佳实践是什么

来自分类Dev

在expressJS中处理路线的最佳实践是什么

来自分类Dev

AngularJS中多个$ http请求的最佳实践是什么?

来自分类Dev

在MongoDB中对数据进行分区的最佳实践是什么?

来自分类Dev

在Laravel 5中创建“设置”模型的最佳实践是什么?

来自分类Dev

在Clean Architecture中管理领域实例的最佳实践是什么?

来自分类Dev

在MySQL中存储多层数据的最佳实践是什么?

来自分类Dev

在Firestore中按顺序增加字段的最佳实践是什么?

来自分类Dev

防止Python中的函数重复的最佳实践是什么?

Related 相关文章

  1. 1

    在数组中查找元素的最佳方法是什么?

  2. 2

    查找存储在数组列表中的对象的平均值的最佳方法是什么?

  3. 3

    查找存储在数组列表中的对象的平均值的最佳方法是什么?

  4. 4

    在数组中存储大量数据的最佳方法是什么?

  5. 5

    Vuejs中mixin的最佳实践是什么?

  6. 6

    在C ++中定义的最佳实践是什么?

  7. 7

    从reducer中的数组中删除重复项的最佳实践是什么?

  8. 8

    与API一起使用时,将Date对象存储在数据库中的最佳实践是什么

  9. 9

    Fortran 函数返回数组时的最佳实践是什么?

  10. 10

    在数组中查找特定数字?

  11. 11

    Perl:在数组中查找数字范围

  12. 12

    在数组中查找数组的有效方法是什么?

  13. 13

    实体框架中多个“包含”的最佳实践是什么?

  14. 14

    在CloudKit中获取CKReferences的最佳实践方法是什么?

  15. 15

    在MVC中处理静态内容的最佳实践是什么

  16. 16

    Matlab中浮点比较的最佳实践是什么?

  17. 17

    MySQL中时区处理的最佳实践是什么?

  18. 18

    在OData中执行“稳定分页”的最佳实践是什么?

  19. 19

    在C#中处理异常的最佳实践是什么?

  20. 20

    在wordpress中更改主机时配置的最佳实践是什么?

  21. 21

    在JDBC中编写SQL查询的最佳实践是什么

  22. 22

    在expressJS中处理路线的最佳实践是什么

  23. 23

    AngularJS中多个$ http请求的最佳实践是什么?

  24. 24

    在MongoDB中对数据进行分区的最佳实践是什么?

  25. 25

    在Laravel 5中创建“设置”模型的最佳实践是什么?

  26. 26

    在Clean Architecture中管理领域实例的最佳实践是什么?

  27. 27

    在MySQL中存储多层数据的最佳实践是什么?

  28. 28

    在Firestore中按顺序增加字段的最佳实践是什么?

  29. 29

    防止Python中的函数重复的最佳实践是什么?

热门标签

归档