Использование java 'indexOf' для '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

Мой вопрос: Как я могу искать индекс 4.5 в массиве arr?

Я думал, что Arrays.asList(arr) составляет список объектов из arr, но он не ведет себя так, как другой массив, brr.

3 4

3 ответа:

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<float[]> l = Arrays.<float[]>asList(arr); //The array is the only index in the List

Да, он ведет себя так. Проблема в том, что вы не создаете arr как Float object array. Вместо этого вы делаете массив примитивным.

Попробуйте этот код

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(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"