【问题标题】:How to find index of int array which match specific value [duplicate]如何找到与特定值匹配的int数组的索引[重复]
【发布时间】:2013-08-12 04:49:06
【问题描述】:

我有

int myArray[]= {12,23,10,22,10}; 

所以我想从myArray 得到index of 23 而不迭代任何循环(forwhile ...)。

我会做类似Arrays.asList(myArray).indexOf(23) 的事情

这不适合我。我得到-1 作为输出。

这适用于String[] 喜欢

  String myArray[]= {"12","23","10","22","10"}; 
  Arrays.asList(myArray).indexOf("23")

那么为什么这不适用于 int[] ? ?

【问题讨论】:

    标签: java arrays list loops


    【解决方案1】:
    Integer myArray[]= {12,23,10,22,10};
    System.out.println(Arrays.asList(myArray).indexOf(23)); 
    

    解决问题

    Arrays.asList(myArray).indexOf(23) 这个搜索对象,所以我们必须使用int 的对象类型,因为int 是原始类型。

    String myArray[]= {"12","23","10","22","10"}; 
    Arrays.asList(myArray).indexOf("23");
    

    在第二种情况下这将起作用,因为String 是对象。

    当我们定义List时,我们将其定义为List<String>List<Integer>。所以原语不在List 中使用。然后Arrays.asList(myArray).indexOf("23") 找到等效对象的索引。

    【讨论】:

    • '@Ruchira' 我同意这一点。那么我们如何将原始类型转换为对象呢?
    • @ankit337 您可以使用 Apache 语言库(commons.apache.org/lang) 执行以下操作Integer[] newArray = ArrayUtils.toObject(oldArray);
    【解决方案2】:

    我同意 Ruchira 的观点,并且还想指出,问题在于 int 是原始对象,而 StringInteger 是实际对象。 (请注意,我会将此作为评论发布,但要等到 50 声望;))

    【讨论】:

      【解决方案3】:

      如果要将基元数组转换为盒装基元列表,请利用 Apache Commons 。获得列表后,如下所示,使用 List 中的 API 按索引查找对象。

      List<Integer> list = Arrays.asList(ArrayUtils.toObject(myArray));
      

      【讨论】:

        【解决方案4】:

        您可以考虑保持数组排序并使用二进制细分来确定索引。在这种情况下,插入和查找都是 O(log(n))(而不是分别为 O(1) 和 O(n))。

        如果您要进行大量查找,您可能希望使用不同的数据结构,例如哈希映射,这不仅是为了提高性能,还因为它更易于编写。

        【讨论】:

          猜你喜欢
          • 2012-12-30
          • 2018-10-22
          • 2023-02-01
          • 2020-09-23
          • 1970-01-01
          • 2020-09-27
          • 1970-01-01
          • 1970-01-01
          • 2014-03-08
          相关资源
          最近更新 更多