Java中如何使用`indexOf`方法查找`float[]`数组中的元素?

4

在Java中,使用java.util.Arrays,以下代码:

float[] arr = {(float)0.2, (float)4.5};
Float[] brr = {new Float(0.2), new Float(4.5)};
Float x = new Float(4.5);
float y = (float)4.5;
System.out.println(Arrays.asList(arr).indexOf(x));
System.out.println(Arrays.asList(arr).indexOf(y));
System.out.println(Arrays.asList(brr).indexOf(x));
System.out.println(Arrays.asList(brr).indexOf(y));

提供

-1
-1
1
1

我的问题:如何在数组arr中搜索4.5的索引?

我认为Arrays.asList(arr)可以从arr创建一个对象列表,但它的行为不像另一个数组brr


你可以循环遍历列表并使用“Wrapped equals”方法来查找索引,我正在寻找你的代码不起作用的原因。 - Marcos Vasconcelos
AndrewSun 的回答是代码没有运行的原因。 - Marcos Vasconcelos
3个回答

6

Arrays.asList接受T...作为参数。当参数为对象数组时,它会被传递,就像你写了Arrays.asList(new Float(0.2), new Float(4.5))一样。

在第二种情况下,参数是原始类型的数组。在这里,Java编译器决定将整个数组视为单个对象。因此,您将传递包含单个元素(即浮点数数组)的数组。

要确认这一点,请尝试以下操作:

Arrays.asList(arr).indexOf(arr) // 返回 0

由于该方法被定义为<T> List<T> asList(T...ts),因此只允许使用上述第二种语句。

    System.out.println(Arrays.<Float>asList(arr).indexOf(x)); //Error
    System.out.println(Arrays.<Float>asList(brr).indexOf(x)); //List<Float>

原始类型中的第一个不能被标记为Float类型的参数。

将其转换为列表的语句如下:

 List<float[]> l = Arrays.<float[]>asList(arr); //The array is the only index in the List

0

是的,它的行为就像这样。问题在于您没有将arr创建为Float对象数组。相反,您创建了原始数组。

尝试使用以下代码:

Float[] arr = {(float)0.2, (float)4.5};
Float[] brr = {new Float(0.2), new Float(4.5)};
float x = 0.2f;
float y = (float)4.5;
System.out.println(Arrays.asList(arr).indexOf(x));
System.out.println(Arrays.asList(arr).indexOf(y));
System.out.println(Arrays.asList(brr).indexOf(x));
System.out.println(Arrays.asList(brr).indexOf(y));

这段代码将为您提供所需的输出


数组arr已经存在,是一个浮点数数组。我需要转换它的所有元素吗? - ewi
你需要将其转换类型或者按照下面的定义方式定义它: Float[] arr = {0.2f, 4.5f}; - Naresh Bharadwaj

0

Arrays.asList(arr),如果arr是一个原始类型的数组,则创建只包含一个元素的列表,该元素就是该数组本身。

I.e.:

    float[] arr = {(float)0.2, (float)4.5};

    System.out.println(Arrays.asList(arr).get(0).getClass().getSimpleName());
      // Prints "float[]"
    System.out.println(Arrays.asList(arr).size());
      // Prints "1"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接