在Java中将int[]矩阵添加到ArrayList中,但出现错误

问题描述 投票:0回答:1
    ArrayList<ArrayList<Integer>> al= new ArrayList<ArrayList<Integer>>();
    int[][] mat= new int[row][col];
    for(int i=0;i<row;i++)
    {
        for(int j=0;j<col;j++)
        {
            mat[i][j]=s.nextInt();
        }
    }
    for(int i=0;i<row;i++)
    {
        al.add(mat[i]);
    }

int[] 无法转换为 ArrayList al.add(mat[i]);

java arraylist
1个回答
0
投票

ArrayList
不是数组

您定义一个包含 ArrayList

 对象的 
ArrayList
。但是您正在尝试放置一组 
int
原始值。数组不是
ArrayList
。因此您收到一条错误,说明您违反了类型系统。您不能将香蕉放入装有猫的集合中。

相反,将

ArrayList
定义为包含数组:

ArrayList < int[] > list = new ArrayList < int[] > ( );

请注意,您无需在 EQUALS 符号右侧重复参数化类型。在现代 Java 中,编译器可以通过查看 EQUALS 的左侧来推断类型。

ArrayList < int[] > list = new ArrayList <> ( );

此外,通常最好使用提供您所需功能的最高超类或超级接口。因此,您可以将您的

ArrayList
称为
List
。在 Java 21+ 中,您可以使用
SequencedCollection
(JEP 431)。

List < int[] > list = new ArrayList < int[] > ( );

完整示例代码:

// Prepare.
List < int[] > list = new ArrayList <> ( );
int rows = 3, cols = 3, counter = 1;
int[][] mat = new int[ rows ][ cols ];

// Populate array.
for ( int i = 0 ; i < rows ; i ++ )
{
    for ( int j = 0 ; j < cols ; j ++ )
    {
        mat[ i ][ j ] = counter ++ ;
    }
}

// Populate ArrayList.
for ( int index = 0 ; index < rows ; index ++ )
{
    list.add ( mat[ index ] );
}

// Report.
list.forEach ( ints -> System.out.println ( Arrays.toString ( ints ) ) );

运行时:

[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
© www.soinside.com 2019 - 2024. All rights reserved.