Java 使用ArrayList创建矩阵
例如,我想创建一个包含n行和m列的ArrayList矩阵Java 使用ArrayList创建矩阵,java,matrix,arraylist,Java,Matrix,Arraylist,例如,我想创建一个包含n行和m列的ArrayList矩阵 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 我已经编写了创建这样一个矩阵的代码,但是当我清除包含列数据的列表时,我的代码不会显示值。这是我的 package testproject; import java.util.ArrayList; public class TestProject { public static void
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
我已经编写了创建这样一个矩阵的代码,但是当我清除包含列数据的列表时,我的代码不会显示值。这是我的
package testproject;
import java.util.ArrayList;
public class TestProject {
public static void main(String[] args) {
ArrayList<Integer> intList = new ArrayList<>();
ArrayList<ArrayList<Integer>> mainList = new ArrayList<>();
for (int i = 0; i < 10; i++) {
for (int k = 0; k < 5; k++) {
intList.add(k);
}
mainList.add(intList);
intList.clear(); //this line is probably the problem
}
for (int row = 0; row < mainList.size(); row++) {
for (int col = 0; col < mainList.get(0).size(); col++) {
System.out.print(mainList.get(row).get(col) + ",");
}
System.out.println("");
}
}
}
包测试项目;
导入java.util.ArrayList;
公共类测试项目{
公共静态void main(字符串[]args){
ArrayList intList=新的ArrayList();
ArrayList mainList=新的ArrayList();
对于(int i=0;i<10;i++){
对于(int k=0;k<5;k++){
intList.add(k);
}
mainList.add(intList);
intList.clear();//这一行可能就是问题所在
}
对于(int row=0;row
是否有可能在不清除intList的情况下清除intList的内容
mainList的内容???我会创建n-或m-数组列表,这取决于您想如何使用它
或者为每行创建一个hashmap>,一个ArrayList。我会创建n或m-ArrayList,这取决于您想如何使用它
或者为每行创建一个hashmap>,一个ArrayList。只需将intList的创建移到for循环中,现在就可以了
import java.util.ArrayList;
public class TestProject {
public static void main(String[] args) {
ArrayList<ArrayList<Integer>> mainList = new ArrayList<>();
for(int i=0;i<10;i++) {
ArrayList<Integer> intList = new ArrayList<>();
for(int k=0;k<5;k++) {
intList.add(k);
}
mainList.add(intList);
}
for(int row=0;row<mainList.size();row++) {
for(int col=0;col<mainList.get(0).size();col++) {
System.out.print(mainList.get(row).get(col)+",");
}
System.out.println("");
}
}
}
import java.util.ArrayList;
公共类测试项目{
公共静态void main(字符串[]args){
ArrayList mainList=新的ArrayList();
for(inti=0;i只需要将intList的创建移到for循环中,现在就可以工作了
import java.util.ArrayList;
public class TestProject {
public static void main(String[] args) {
ArrayList<ArrayList<Integer>> mainList = new ArrayList<>();
for(int i=0;i<10;i++) {
ArrayList<Integer> intList = new ArrayList<>();
for(int k=0;k<5;k++) {
intList.add(k);
}
mainList.add(intList);
}
for(int row=0;row<mainList.size();row++) {
for(int col=0;col<mainList.get(0).size();col++) {
System.out.print(mainList.get(row).get(col)+",");
}
System.out.println("");
}
}
}
import java.util.ArrayList;
公共类测试项目{
公共静态void main(字符串[]args){
ArrayList mainList=新的ArrayList();
对于(int i=0;i调用mainList.add(intList);
您正在将指向intList对象的引用添加到mainList中,而不是复制值。在调用mainList.add(intList)时,您必须每行创建一个“intList”实例,并且不清除任何内容。;
您正在将指向intList对象的引用添加到mainList中,而不是复制值。您必须为每行创建一个“intList”实例,并且不清除任何内容。是的,您的直觉是正确的。intList.clear();
行是问题所在。
因为intList
存储在mainList
中,如果清除intList
,mainList
中的信息也会丢失。
一个解决方案是:在每个循环中创建一个新的intList
但是因为矩阵通常在它们的维度上是不可变的,即<代码> ARAYLISTABS/CODE > -你应该考虑使用<代码> INT[][INTLIST/<代码>为你的矩阵。 是的,你的直觉是正确的。
因为
intList
存储在mainList
中,如果清除intList
,mainList
中的信息也会丢失。
一个解决方案是:在每个循环中创建一个新的intList
但是,因为矩阵通常在它们的维度上是不可变的,即<>代码> ARARYLISTABS/CODE > -您应该考虑使用<代码> INT[][]intList
用于矩阵。Java使用引用。因此,在您的程序中,mainList
将包含对同一唯一的intList
的5个引用。对intList
所做的任何操作都将反映在mainList
中的所有“行”中,清除、更改值等
如果要创建矩阵,您很可能希望每个“行”都是对不同列表的引用。这可以通过在循环中实例化一个新列表来实现:
package testproject;
import java.util.ArrayList;
public class TestProject {
public static void main(String[] args) {
ArrayList<ArrayList<Integer>> mainList = new ArrayList<>();
for (int i = 0; i < 10; i++) {
ArrayList<Integer> intList = new ArrayList<>(); // This creates a new list for each row.
for (int k = 0; k < 5; k++) {
intList.add(k);
}
mainList.add(intList);
}
for (int row = 0; row < mainList.size(); row++) {
for (int col = 0; col < mainList.get(0).size(); col++) {
System.out.print(mainList.get(row).get(col) + ",");
}
System.out.println("");
}
}
}
包测试项目;
导入java.util.ArrayList;
公共类测试项目{
公共静态void main(字符串[]args){
ArrayList mainList=新的ArrayList();
对于(int i=0;i<10;i++){
ArrayList intList=new ArrayList();//这将为每一行创建一个新列表。
对于(int k=0;k<5;k++){
intList.add(k);
}
mainList.add(intList);
}
对于(int row=0;row
在您的程序中,清除中间列表是不必要的。Java与引用一起工作。因此,在您的程序中,mainList
将包含对相同唯一的intList
的5个引用。您对intList
所做的任何操作都将反映在mainList
中的所有“行”中,清除、更改值等
如果要创建矩阵,您很可能希望每个“行”都是对不同列表的引用。这可以通过在循环中实例化一个新列表来实现:
package testproject;
import java.util.ArrayList;
public class TestProject {
public static void main(String[] args) {
ArrayList<ArrayList<Integer>> mainList = new ArrayList<>();
for (int i = 0; i < 10; i++) {
ArrayList<Integer> intList = new ArrayList<>(); // This creates a new list for each row.
for (int k = 0; k < 5; k++) {
intList.add(k);
}
mainList.add(intList);
}
for (int row = 0; row < mainList.size(); row++) {
for (int col = 0; col < mainList.get(0).size(); col++) {
System.out.print(mainList.get(row).get(col) + ",");
}
System.out.println("");
}
}
}
包测试项目;
导入java.util.ArrayList;
公共类测试项目{
公共静态void main(字符串[]args){
ArrayList mainList=新的ArrayList();
对于(int i=0;i<10;i++){
ArrayList intList=new ArrayList();//这将为每一行创建一个新列表。
对于(int k=0;k<5;k++){
intList.add(k);
}
mainList.add(intList);
}
对于(int row=0;row
在您的程序中,不需要清除中间列表。您能否只声明一个新的ArrayList newList=new ArrayList(intList);然后将其添加到主列表中