繁体   English   中英

为什么不能将整数的 HashSet 或 LinkedList 转换为 int[]?

[英]Why can't a HashSet or LinkedList of Integers converted to int[]?

    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() function 认为返回将是 Object[]?

Set.toArray返回Object数组

对象[] toArray()

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

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

或者您可以通过迭代Set来使用 java-8 stream

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

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

返回 object 的字符串表示形式。 通常,toString 方法返回一个字符串,该字符串“以文字形式表示”此 object。 结果应该是一个简洁但信息丰富的表示,易于人们阅读

int[] 是 Java 中的原始数据类型,它是 object 而不是 Class。 如果您需要转换为 Object[] Class,您可以使用包装类,它是 Integer[],因为它们继承自 Object class。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM