Почему HashSet или LinkedList целых чисел не могут быть преобразованы в int []? - PullRequest
0 голосов
/ 26 октября 2019
    public static String duplicate(int[] numbers){
        Set<Integer> set = new HashSet<>();
        Set<Integer> duplicates = new HashSet<>();

        for (int num : numbers){
            if (set.contains(num)) {
                duplicates.add(num);
            } else {
                set.add(num);
            }
        }
        int[] ans = duplicates.toArray();
        return ans.sort().toString();
    }

Eclipse говорит "Несоответствие типов: невозможно преобразовать из Object [] в int []" для строки int[] ans = duplicates.toArray();

Почему бы и нет? Я попробовал LinkedList и ArrayList также. HashSet () использует тип, а функция .toArray () считает, что возвращаемое значение будет Object []?

Ответы [ 2 ]

3 голосов
/ 26 октября 2019

Set.toArray возвращает Object массив

Object [] toArray ()

Вы можете преобразовать Set<Integer> в Integer массив

Integer[] i = duplicates.toArray(Integer[]::new);

Или вы можете использовать java-8 stream, повторяя Set

int[] arr = duplicates.stream().mapToInt(i->i).toArray();  // or mapToInt(Integer::intValue)

Примечание: С другой стороны ваш метод возвращаеттип String и arr.toString() возвращает строковое представление объекта, например [I@edf4efb здесь

Возвращает строковое представление объекта. В общем случае метод toString возвращает строку, которая «представляет собой текст» этого объекта. Результатом должно быть краткое, но информативное представление, которое легко читается человеком

0 голосов
/ 26 октября 2019

int [] - это простой тип данных в Java, и это объект, а не класс. Если вам нужно преобразовать в класс Object [], вы можете использовать классы Wrapper, которые являются Integer [], поскольку они наследуются от класса Object.

Подробнее о классах-оболочках в Java: https://www.geeksforgeeks.org/wrapper-classes-java/

...