【问题标题】:my array to list conversion is not working, and i am not getting why?我的数组到列表的转换不起作用,我不明白为什么?
【发布时间】:2020-04-30 00:58:22
【问题描述】:

程序计算最大数的频率,但将数组转换为列表给出 list=[I@7852e922 而不是它应该实际返回的内容。

static int birthdayCakeCandles(int[] ar) {
        Arrays.sort(ar);
        for(int i=0;i<ar.length;i++)
        {
            System.out.print(ar[i]);  
        }

        int max=ar[ar.length-1];
        System.out.println("\n"+max);
        List list = Arrays.asList(ar);
        for(int i=0;i<list.size();i++)
        {
            System.out.println(list.get(i));  
        }
        int sol=Collections.frequency(list,max);
        return sol;

    }
    public static void main(String[] args) {
        int arr[]={1,2,3,4,4,2};

    int ans=birthdayCakeCandles(arr);
    System.out.print(ans);
    }

这给出的输出是:

122344
4
[I@7852e922
0

这是不正确的,因为数组到列表的转换没有以正确的方式进行。

【问题讨论】:

  • 这能回答你的问题吗? Print ArrayList
  • “不工作”,你能更具体一点吗?
  • 如果您希望 Arrays.asList 生成整数列表(而不是 int[] 列表),请将 int arr[] 更改为 Integer arr[]
  • @gauravgupta 如果你得到答案,请接受答案:meta.stackexchange.com/questions/5234/…

标签: java arrays arraylist


【解决方案1】:

来自Arrays.asList(int[]) not working

当您将一个基元数组(在您的情况下为 int[])传递给 Arrays.asList 时,它会创建一个带有单个元素的 List&lt;int[]&gt; - 数组本身。

asList 的签名是List&lt;T&gt; asList(T...)。原语不能替换泛型类型参数。因此,当您将int[] 传递给此方法时,整个int[] 数组将替换T,您将获得List&lt;int[]&gt;。另一方面,当您将Integer[] 传递给该方法时,Integer 将替换T,您将获得List&lt;Integer&gt;

这就是为什么在你的情况下它 Collections.frequency(list,max) 返回 0。

改变你的功能如下:

static int birthdayCakeCandles(int[] ar) {
        Arrays.sort(ar);
        for(int i=0;i<ar.length;i++)
        {
            System.out.print(ar[i]);  
        }

        int max=ar[ar.length-1];
        // convert your int ar to Integer List
        List<Integer> list = Arrays.stream(ar).boxed()// Stream<Integer>
                              .collect(Collectors.toList());
        System.out.println("\n"+max);
        int sol=Collections.frequency(list,max);
        return sol;

    }

【讨论】:

    【解决方案2】:

    Arrays.asList 不会像您预期的那样工作。

    Java 8 开始:

    List<Integer> list = Arrays.stream(ar).boxed().collect(Collectors.toList());
    

    【讨论】:

    • 连接问题为什么 Arrays.asList 不能按预期方式工作?在这种情况下
    【解决方案3】:

    你不能使用流行的 Arrays.asList 直接转换它,因为装箱问题。

    为此,您可以在代码中进行以下更改。

    public static void main(String[] args) {
            Integer arr[]={1,2,3,4,4,2};
    
            int ans=birthdayCakeCandles(arr);
            System.out.print(ans);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-20
      • 1970-01-01
      • 2021-05-17
      • 2021-10-07
      相关资源
      最近更新 更多