用Java创建动态3D数组

时间:2018-11-09 07:38:15

标签: java arrays arraylist

我有一条信息取决于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中创建动态大小数组,以便同时引用因子和值吗?任何建议大受赞赏。

2 个答案:

答案 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));
                }
            }
        }
    }
}

运行:: https://ideone.com/40WugA