如何用整数填充java中的二维数组列表?
我必须创建一个大小未知的二维数组。所以我决定使用2d ArrayList。问题是我不确定如何初始化这样的数组或存储信息 假设我有以下数据如何用整数填充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]. 数组能否为我自动更新列/行 谢谢你的帮助 我不知道如何初始化这样的数组或存储信息。 比如说
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)但是,假设您已经构建了空数组。您必须以类似于上面代码的方式构造数组(即使您只是将所有值设置为零),更新才能有更新内容。@Entik,添加了一个更完整的示例。@Edwin Buck,我不知道数组大小。这是一个文件读取,我需要创建一个基于连接节点的邻接矩阵。所以我需要直接设置开始数组[0][1]=1。随着文件继续读取,我需要继续这个过程。。我想知道arrayList是否在我向其添加项后自行构建其行/列否,如果您尝试在特定索引处输入值,arrayList不会“用零填充”或类似的内容。您可以在中间添加和更新值,但不能“在任意索引中添加值”。我认为我不允许使用外部库:(我正在处理.java文件
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);
}
}