为什么HashSet或Integer的LinkedList不能转换为int []?

时间:2019-10-26 19:15:07

标签: java arrays generics types integer

    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对int[] ans = duplicates.toArray();行说“类型不匹配:无法从Object []转换为int []”

为什么不呢?我也尝试了LinkedList和ArrayList。 HashSet()使用该类型,而.toArray()函数是否认为返回将是Object []?

2 个答案:

答案 0 :(得分:3)

Set.toArray返回Object数组

  

Object [] toArray()

您可以将Set<Integer>转换为Integer数组

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

或者您可以通过迭代stream

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

注意:另一方面,您的方法返回类型为String,而arr.toString()返回对象的字符串表示形式,例如[I@edf4efb here

  

返回对象的字符串表示形式。通常,toString方法返回一个“以文本形式表示”此对象的字符串。结果应该是简洁但内容丰富的表示形式,便于人们阅读

答案 1 :(得分:0)

int []是Java中的原始数据类型,它是对象而不是类。 如果需要转换为Object []类,则可以使用Integer []的Wrapper类,因为它们是从Object类继承的。

有关Java包装类的更多信息:https://www.geeksforgeeks.org/wrapper-classes-java/