Java 将int数组转换为集合

Java 将int数组转换为集合,java,arrays,collections,Java,Arrays,Collections,我正在一步一步地学习Java。现在我知道了数组,接下来是集合 在我基于项目学习的过程中,我注意到大多数程序员选择使用集合而不是普通数组来消除循环并使用预定义函数(如排序等等)。因此,首先我尝试将int[]转换为集合。但是我在foreach循环中得到一个错误 import java.util.Arrays; import java.util.List; import java.util.Scanner; public class Coll { public static void ma

我正在一步一步地学习Java。现在我知道了数组,接下来是集合

在我基于项目学习的过程中,我注意到大多数程序员选择使用
集合
而不是普通数组来消除循环并使用预定义函数(如
排序
等等)。因此,首先我尝试将
int[]
转换为
集合
。但是我在
foreach
循环中得到一个错误

import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

public class Coll {

    public static void main(String[] args) {
        Coll obj = new Coll();
        obj.op();
    }

    void op() {
        System.out.println("To convert Array to Collections");
        Scanner getinp = new Scanner(System.in);
        System.out.println("Enter the size of array : ");
        int siz = getinp.nextInt();
        int[] arry = new int[siz];
        System.out.println("Enter the values of elements");
        for (int i = 0; i < arry.length; i++) {
            System.out.println("arry[" + i + "] : ");
            arry[i] = getinp.nextInt();
        }

        List arrycoll = Arrays.asList(arry);
        for (String elem : arrycoll) {
            System.out.println(elem);
        }
    }
}
指向arrycoll,它表示:

required `String` but found `Object`
如果我将
arry
定义为
String
并存储
String
s,这不会是一个错误,但对于
int
它不起作用。

给定此消息

它表示需要的字符串,但找到了对象

您将获得两条重要信息。第一,您正在对
int[]
的元素使用
String
。第二,您有一个原始类型(因此整数元素被视为对象元素)。 不要使用!我很确定你想要像这样的东西

List<Integer> arrycoll = Arrays.asList(arry);
for(Integer elem:arrycoll) { // <-- Integer, not String.
  System.out.println(elem);
}

没问题

  • 将列表更改为列表,现在将列表中的对象静态地键入整数(糟糕的是,它们都被视为整数)

  • 将String替换为Integer,因为现在列表中的所有对象都是Integer类型(不是String或其他类型)

  • 必需的
    字符串
    但找到的
    对象

    在for-each循环中,使用字符串作为元素的类型,而arrycoll是类型为Object的原始列表引用的列表

    List arrycoll
    
    您已经声明了原始列表引用的列表。您必须告诉编译器它们将是
    列表值

    List<Integer> arrycoll
    

    仅用于打印目的,只需像这样尝试;强制转换为
    int[]

    List arrycoll = Arrays.asList(arry);
    for (Object elem : arrycoll) {
    
        int[] iArr1 = (int[]) elem;     
        for (int i : iArr1) {
            System.out.println(i);
        }
    }
    

    使用泛型<代码>列表。此外,您正在插入一个整数并试图取回一个字符串。
    Arrays
    实际上支持
    sort
    ing。您也可以将foreach语法用于普通数组。您可以使用
    arrays#sort(int[])
    对数组进行排序,就像使用
    Collections.sort(List)
    一样。现在您将在以下位置获得此编译器错误:
    arrays.asList(arry)
    。类型不匹配:无法从列表转换为列表谢谢。。将其从int arry更改为Integer arry可以工作,在将其设置为列表后,Collections.reverse(arrycoll)可以工作。。但是Integer和int的区别是什么呢。。从一开始我就认为integer是扩展,int是在程序中定义数据类型的关键字@艾略特Frisch@krnaveen14否。
    int
    是一个
    Integer
    是一个包装类。基本类型是一种性能优化。另外,
    集合
    (s)需要对象实例。主要区别在于整数可以用作对象的子类,例如作为通用参数存储在列表或映射中。“Integer”类还为int提供了其他方法。虽然大多数情况下由于自动装箱而隐藏,但您可以显式地在int到Integer之间强制转换。另外,一个主要的关键区别是Integer的值可以为null仍然返回此类型的列表:
    List
    yup。这是可行的。。非常感谢。但是我不能让你的答案被接受,因为艾略特先发布了答案。没问题,欢迎。
    List arrycoll
    
    List<Integer> arrycoll
    
            Integer[]  arry = new Integer[siz];
    
            List<Integer> arrycoll = Arrays.asList(arry);
            for (Integer elem : arrycoll) {
                System.out.println(elem);
            }
    
    List arrycoll = Arrays.asList(arry);
    for (Object elem : arrycoll) {
    
        int[] iArr1 = (int[]) elem;     
        for (int i : iArr1) {
            System.out.println(i);
        }
    }