[英]Multidimensional Arrays in Java
好的,所以我在职业生涯的大部分时间里一直在使用PHP,发现自己需要使用Java。 就我而言,我最大的问题是用Java创建和操作数组。 PHP中的示例:
$cars = array(1 => array("stats"=> array("velocity"=>100,
"acceleration"=>0,
"energy"=>30000,
"distance"=>200
)
),
2 => array("stats"=> array("velocity"=>3,
"acceleration"=>6,
"energy"=>30000,
"distance"=>200)
)
);
我试图在Java中重新创建这种类型的数组,但是在初始化它时遇到了麻烦。 在这种情况下,数组是否视为字符串? 并且在创建数组之前必须设置数组的大小吗? 例如: String[][][] car = new String[][][]
?
我认为Java没有TRUE多维数组。 像a[i][j][k]
一样被访问的数组只是数组,数组或数组。
您可以尝试以下构造:
String[][] car = new String [][] { { "X0", "Y0"},
{ "X1", "Y1"},
{ "X2", "Y2"},
{ "X3", "Y3"},
{ "X4", "Y4"} };
就像aet在评论中说的那样-如果您正在考虑使用Java执行此操作-则不要。 你这样做是错的。
你应该上汽车课
public class Car {
private int velocity;
private int acceleration;
private int energy;
private int distance;
//getters and setters, a constructor that gets all the property values ...
}
然后将您的汽车存放在一些集合中。 ArrayList是最简单的方法:
List<Car> cars = new ArrayList<Car>();
cars.add(new Car(100,0,30000,200));
cars.add(new Car(3,6,30000,200));
访问汽车列表将如下所示:
cars.get(0).getVelocity(); //collection indexes start at 0
1) "stats"
索引是否正确? 如果没有,您可以:
Map<String, Integer>[] cars = new HashMap<String, Integer>[your length here];
这将通过数字索引您的汽车,跳过“统计”索引,并允许您通过字符串索引最后一个整数:
int velocityOfSecondCar = cars[1].get("velocity"); //note indexing from 0
2)如果"stats"
索引非常严格,则必须更深入一维
您在PHP中所拥有的通常会表示为Java中的嵌套Map
实例。 例如:
HashMap<Integer,Map<String,Map<String,Integer>>> data = new HashMap<>();
然后,您可以通过说出值(假设正确填充了哈希的所有级别):
int velocity = data.get(1).get("stats").get("velocity");
像这样填充嵌套地图可能很复杂,通常在添加数据成员之前,您将使用辅助方法来确保所有“父”级别都已填充。
是的,初始化数组时必须提供长度。 因此,您的数组看起来像这样:
int lenght1=x;
int length2=y;
int lenght3=z;
String[][][] car = new String[lenght1][lenght2][lenght3]
我自己不是PHP开发人员,但是数组中的类将遵循Java在抽象和继承方面实现的OOP规则。 因此,在检索元素时,无论包含它们的类或接口是什么,都可以使用它们对应的接口。
另一方面,如果您在初始化之前不知道数组长度,则可以使用ArrayList类,它几乎就像一个Vector。 如果添加了新元素,则此类会修改其内部长度。 除了ArrayList外,您还可以在Java规范中拥有一套完整的数据结构来存储元素,例如Maps,Sets,Lists等。
实例化ArrayList时,应指定哪个类或接口描述要存储在数据结构中的对象,因此您必须使用泛型实例化该结构。 在您的情况下:
ArrayList<String> dim1=new ArrayList<String>();
ArrayList<ArrayList<String>> dim2=new ArrayList<ArrayList<String>>();
ArrayList<ArrayList<ArrayList<String>>> dim3= new ArrayList<ArrayList<ArrayList<String>>>();
如您所见,此结构比上面的简单数组更性感,但显然需要更多的精力来处理它。 不要忘了在将数组列表放入3d矩阵之前实例化它们,否则以后访问空对象会出现异常。
尝试这个..
Map<Integer, HashMap<String, HashMap<String, Integer>>> map = new HashMap<>();
HashMap<String, Integer> hm = new HashMap<>();
hm.put("Velocity", 1);
hm.put("acceleration", 2);
HashMap<String, HashMap<String, Integer>> state1 = new HashMap<>();
state1.put("state1", hm);
map.put(1, state1);
System.out.println(map);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.