Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用整数填充java中的二维数组列表?_Java_Arraylist - Fatal编程技术网

如何用整数填充java中的二维数组列表?

如何用整数填充java中的二维数组列表?,java,arraylist,Java,Arraylist,我必须创建一个大小未知的二维数组。所以我决定使用2d ArrayList。问题是我不确定如何初始化这样的数组或存储信息 假设我有以下数据 0 connects 1 2 connects 3 4 connects 5 …等等,直到大量的随机连接 我想插入 true(1) into [0][1], true(1) into [2][3], true(1) into [4][5]. 数组能否为我自动更新列/行 谢谢你的帮助 我不知道如何初始化这样的数组或存储信息。 比如说

我必须创建一个大小未知的二维数组。所以我决定使用2d ArrayList。问题是我不确定如何初始化这样的数组或存储信息

假设我有以下数据

   0 connects 1
   2 connects 3 
   4 connects 5
…等等,直到大量的随机连接

我想插入

true(1) into [0][1], 
true(1) into [2][3], 
true(1) into [4][5]. 
数组能否为我自动更新列/行

谢谢你的帮助

我不知道如何初始化这样的数组或存储信息。

比如说:

List<List<Integer>> twoDim = new ArrayList<List<Integer>>();

twoDim.add(Arrays.asList(0, 1, 0, 1, 0));
twoDim.add(Arrays.asList(0, 1, 1, 0, 1));
twoDim.add(Arrays.asList(0, 0, 0, 1, 0));

下面是一个更完整的示例:

import java.util.*;

public class Test {

    public static void main(String[] args) {

        List<List<Integer>> twoDim = new ArrayList<List<Integer>>();

        String[] inputLines = { "0 1 0 1 0", "0 1 1 0 1", "0 0 0 1 0" };

        for (String line : inputLines) {
            List<Integer> row = new ArrayList<Integer>();

            Scanner s = new Scanner(line);
            while (s.hasNextInt())
                row.add(s.nextInt());

            twoDim.add(row);
        }
    }
}
import java.util.*;
公开课考试{
公共静态void main(字符串[]args){
List twoDim=new ArrayList();
字符串[]inputLines={“0110”、“01101”、“01001”};
用于(字符串行:输入行){
列表行=新的ArrayList();
扫描仪s=新扫描仪(行);
而(s.hasnetint())
添加(s.nextInt());
添加(行);
}
}
}

以下问题的简短答案是

array.get(i1).put(i2, value);

但是,如果ArrayList的大小小于p>,那么get和put都可能失败。如果您事先没有所有的数据来利用aioobe的解决方案,那么您可以使用Google的Guava库中的表

Table<Integer,Integer,Integer> matrix = new HashBasedTable<Integer,Integer,Integer>();
matrix.put(rowIndex,columnIndex,value);
表矩阵=新的HashBasedTable();
矩阵.put(行索引、列索引、值);

这种方法的主要缺点是,如果处理大量数据,速度和内存效率都不高,因为所有内容都是散列查找,并且原语都用整数包装。

如果您知道有3行5列(如数据示例中所示),则可以按如下方式对其进行初始化:

int[][] a = new int[3][5]; 
但是,如果行数发生变化,可以执行以下操作:

String dataStr = "0,1,0,1,0:0,1,1,0,1:0,0,0,1,0";

String[] rows = dataStr.split(":");

String[] cols = rows[0].split(",");
现在您可以初始化:

int[][] a = new int[rows.length][cols.length];

这将适应行和列大小的变化。可能不是最优雅的方法,但它应该会起作用。

您的示例似乎需要从整数对到布尔值的映射(默认值为false)。如果这是一个稀疏映射(即,实际上大多数位置都是false),那么最好使用HashSet或类似的东西(使用hashCode和equals的适当实现封装两个int的类)

然后,要说“0连接1”,你要写

set.add(new IntPair(0,1));
这实际上取决于您以后要使用什么操作—这样的哈希集具有快速查找和更改功能,并且不会占用太多空间,但您无法快速获得“节点1的所有邻居”。如果您需要这样的访问,您可能只需要像

class Node {
   int id;
   Set<Node> neighbours;
}
类节点{
int-id;
设置邻居;
}
以及另外一个此类节点的列表/数组/集合


“未知大小的数组”这个问题还不够具体,无法准确回答。

因为您只需要在该2D数组中存储布尔值,所以我认为最合适的数据结构(内存消耗和有用的接口)应该是
java.util.BitSet
,它基本上是一个模拟位数组的类:

由于它是一个2D阵列,我认为应该采用以下方法:

List<BitSet> bitArrays = new ArrayList<BitSet>();
List bitArrays=new ArrayList();
在列表中,您不能只说:“这是第5个元素”,而不插入前4个元素。但是在
位集中
,您可以简单地
set()
您需要的任何位,它将自动扩展到所需的大小。

import java.util.*;
  import java.util.*;
    public class ArrayListDS { 
        public static void main( String [] args ) { 

        ArrayList<ArrayList<Integer>> row = new ArrayList<ArrayList<Integer>>();

           Scanner sc = new Scanner(System.in);

           System.out.println("Enter the number of row: ");
           int n = sc.nextInt();

           for(int i = 0; i < n; i++){

               ArrayList<Integer> col = new ArrayList<Integer>();
               row.add(col);

           System.out.println("Enter the number of column: ");
           int m = sc.nextInt();

               for(int j = 0; j < m; j++){
                    col.add(sc.nextInt()); 
               }
               System.out.println();
           }
           System.out.println(row);
        }
    }
公共类ArrayList{ 公共静态void main(字符串[]args){ ArrayList行=新的ArrayList(); 扫描仪sc=新的扫描仪(System.in); System.out.println(“输入行数:”); int n=sc.nextInt(); 对于(int i=0;i
我需要逐列指定特定的行。如何在[0][1]、[0][2]等中插入数字。。要设置一个特定的值,可以
toDim.get(x).set(y,value)int[][] a = new int[3][5]; 
String dataStr = "0,1,0,1,0:0,1,1,0,1:0,0,0,1,0";

String[] rows = dataStr.split(":");

String[] cols = rows[0].split(",");
int[][] a = new int[rows.length][cols.length];
class IntPair {
   int first;
   int second;
   public boolean equals(Object o) {
      return o instanceof IntPair &&
         ((IntPair)o).first == first &&
         ((IntPair)o).second == second;
   }
   /** optimized for small numbers */
   public int hashCode() {
       return first + second * 44729;
   }
   public String toString() {
     return "(" + first + ", " + second + ")";
   }
}
set.add(new IntPair(0,1));
class Node {
   int id;
   Set<Node> neighbours;
}
List<BitSet> bitArrays = new ArrayList<BitSet>();
  import java.util.*;
    public class ArrayListDS { 
        public static void main( String [] args ) { 

        ArrayList<ArrayList<Integer>> row = new ArrayList<ArrayList<Integer>>();

           Scanner sc = new Scanner(System.in);

           System.out.println("Enter the number of row: ");
           int n = sc.nextInt();

           for(int i = 0; i < n; i++){

               ArrayList<Integer> col = new ArrayList<Integer>();
               row.add(col);

           System.out.println("Enter the number of column: ");
           int m = sc.nextInt();

               for(int j = 0; j < m; j++){
                    col.add(sc.nextInt()); 
               }
               System.out.println();
           }
           System.out.println(row);
        }
    }