我有一条信息取决于3个不同的因素(我用数字表示),例如
如果0,0,0,则信息为(值) 如果0,0,1,则信息为(值) 等
我最初创建了一个3d数组,并用嵌套的for循环填充它,例如
for (int i = 0; i < maxfactor1; i++) {
for (int a = 0; a < maxfactor2; a++) {
for (int j = 0; j < maxfactor3; j++) {
test2[i][a][j] = j * 2.0;
System.out.println(test2[i][a][j]);
}
}
}
问题是我可能没有所有单一因素组合,而将它们包括在内是错误的。我搜索了数组的动态实现,并发现了类似的内容
ArrayList<Integer> row = new ArrayList<Integer>();
row.add(1);
row.add(11);
row.add(111);
row.add(2);
row.add(22);
row.add(222);
ArrayList<ArrayList<Integer>> test = new ArrayList<ArrayList<Integer>>();
test.add(row);
问题是,尽管我能够存储因素,但我无法存储值。我需要能够轻松访问因子(例如for循环中)以及值。
还有其他方法可以在Java中创建动态大小数组,以便同时引用因子和值吗?任何建议大受赞赏。
答案 0 :(得分:3)
@Roy Shahaf建议的解决方案示例。在Map
//Lombok annotations to generate Getters,Setters,Constructor,Equals and Hashcode methods
@Data @AllArgsContructor @EqualsAndHashCode
public class Key {
private Integer x;
private Integer y;
private Integer z;
}
然后您可以将其用作存储在Map
中的数据的密钥:
@Test
public void storeDataInMapWithCompositeKey() {
Map<Key, Integer> myMap = new HashMap<>();
myMap.put(new Key(0,0,0), 0);
myMap.put(new Key(0,0,1), 1);
}
答案 1 :(得分:1)
您可以尝试使用HashMap<String, Integer>
。像[1],[1],[0]之类的索引,因此我们可以将其设为key =“ 1,1,0”,并为该key赋值。
/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
private class Array3D {
Map<String, Integer> arr = new HashMap<String, Integer>();
public void add(int i, int j, int k, int value) {
arr.put(i + "," + j + "," + k, value);
}
public int get(int i, int j, int k) {
return arr.get(i + "," + j + "," + k);
}
}
public static void main (String[] args) throws java.lang.Exception
{
Array3D arr = new Ideone().new Array3D();
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 3; j++) {
for(int k = 0; k < 3; k++) {
arr.add(i, j, k, i+j+k + 55);
System.out.println(arr.get(i,j,k));
}
}
}
}
}