【问题标题】:Why can't a HashSet or LinkedList of Integers converted to int[]?为什么不能将整数的 HashSet 或 LinkedList 转换为 int[]?
【发布时间】:2020-02-22 17:09:24
【问题描述】:
    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[]?

【问题讨论】:

    标签: java arrays generics types integer


    【解决方案1】:

    Set.toArray 返回Object 数组

    对象[] toArray()

    您可以将Set&lt;Integer&gt; 转换为Integer 数组

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

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

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

    注意:另一方面,您的方法返回类型是Stringarr.toString() 返回对象的字符串表示形式,例如[I@edf4efbhere

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 嗯,int[] 不是原始类型,它是原始类型的 array。数组本身是一个对象并且有一个类:Class&lt;int[]&gt;
      猜你喜欢
      • 2013-09-22
      • 1970-01-01
      • 1970-01-01
      • 2012-10-17
      • 1970-01-01
      • 1970-01-01
      • 2022-12-10
      • 2016-06-12
      • 1970-01-01
      相关资源
      最近更新 更多