java `indexOf` 用于 `float[]`
The use of java `indexOf` for `float[]`
在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
不同。
是的,它的行为是这样的。问题是您没有将 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));
此代码将为您提供所需的输出
Arrays.asList
以 T...
作为参数。当参数是一个对象数组时,它的传递就像你写的 Arrays.asList(new Float(0.2), new Float(4.5))
.
在你的第二种情况下,参数是一个基元数组。此处,Java 编译器决定将整个数组视为单个对象。因此,您将传递一个包含单个元素的数组,即浮点数组。
要确认这一点,请尝试以下操作:
Arrays.asList(arr).indexOf(arr) // returns 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的语句如下:
List<float[]> l = Arrays.<float[]>asList(arr); //The array is the only index in the List
Arrays.asList(arr)
,如果 arr
是基元数组,则创建 单个元素的列表 ,这是数组本身。
即:
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"
在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
不同。
是的,它的行为是这样的。问题是您没有将 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));
此代码将为您提供所需的输出
Arrays.asList
以 T...
作为参数。当参数是一个对象数组时,它的传递就像你写的 Arrays.asList(new Float(0.2), new Float(4.5))
.
在你的第二种情况下,参数是一个基元数组。此处,Java 编译器决定将整个数组视为单个对象。因此,您将传递一个包含单个元素的数组,即浮点数组。
要确认这一点,请尝试以下操作:
Arrays.asList(arr).indexOf(arr) // returns 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的语句如下:
List<float[]> l = Arrays.<float[]>asList(arr); //The array is the only index in the List
Arrays.asList(arr)
,如果 arr
是基元数组,则创建 单个元素的列表 ,这是数组本身。
即:
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"