kir*_*rgy 2 php java associative-array
我来自PHP背景,我正在尝试创建一个多维数组,但难以理解Java的处理方式.我认为这可以使用JSON和GSON库来实现,但我无法理解如何通过在线跟踪几个教程来完成这项工作.
这是我在PHP中所追求的,我如何在Java中实现同样的东西?
function creatCars($id) {
$aCars = array(
0 => array(
'name' => 'vauxhall',
'doors' => 5,
'color' => 'black',
),
1 => array(
'name' => 'peogeot',
'doors' => 3,
'color' => 'red',
),
);
return $aCars[$id];
}
function printFirstCarName($sName) {
$aCar = createCars(0);
echo $aCars['name'];
}
//prints "vauxhall"
printFirstCarName();
Run Code Online (Sandbox Code Playgroud)
数组在PHP中是不一样的Java数组.以下是不同之处:
PHP数组实际上是字典.它们为每个键存储一个值,其中键可以是整数或字符串.如果您尝试使用其他内容作为键,它将转换为整数或字符串.
Java数组的关联方式与它们在PHP中的关联方式不同.让我们从Java中的一维数组开始:
Java中的一维数组具有固定长度(不能更改),每个键是一个整数,范围0为array.length - 1.因此,实际上称为索引的键总是整数.此外,在Java中,如果有与键阵列2和4,还具有(至少)的密钥0,1并且3,因为该长度必须至少5然后.
Java 中的数组也只有一种类型,数组中的每个值只能是指定的类型.数组的大小和类型都不能改变.
在Java中创建数组时,您有两种可能性:
在创建数组时明确指定长度
String[] words = new String[4];
Run Code Online (Sandbox Code Playgroud)
该变量words现在包含String一个长度为4 的类型数组.所有索引(0到3)的值最初都设置为null.
在创建数组时指定元素
String[] words = new String[] {"apple", "banana", "cranberry"};
Run Code Online (Sandbox Code Playgroud)
变量words现在包含String一个长度为3 的类型数组.包含的元素是指定的,第一个元素绑定到索引0,第二个元素绑定到索引1,依此类推.
您可以将多维数组视为包含数组的数组.二维数组可能如下所示:
String[][] twoD = new String[][] {
{"apple", "banana", "cranberry"},
{"car", "ship", "bicycle"}
}
Run Code Online (Sandbox Code Playgroud)
对于这twoD[0][2]将是"cranberry"和twoD[1][1]将来"ship".但是数组的维数不会影响键是整数的事实.
尽管Java没有用于关联数组的内置语言构造,但它提供了Map具有各种实现的接口,例如HashMap.A Map具有键的类型,以及值的类型.你可以使用这样的地图:
HashMap<String, String> map = new HashMap<String, String>();
map.put("car", "drive");
map.put("boat", "swim");
System.out.println("You can " + map.get("car") + " a car.");
System.out.println("And a boat can " + map.get("boat") + ".");
Run Code Online (Sandbox Code Playgroud)
这将输出:
You can drive a car.
And a boat can swim.
Run Code Online (Sandbox Code Playgroud)
你的问题的答案是,由于你的一些值是字符串,有些是整数,所以它不可能以合理的方式存在.但这将是与PHP数组最相似的代码:
//array of HashMaps which have Strings as key and value types
HashMap<String, String>[] cars = new HashMap<String, String>[2];
HashMap<String, String> first = new HashMap<String, String>();
first.put("name", "vauxhall");
first.put("doors", "5");
first.put("color", "black");
HashMap<String, String> second = new HashMap<String, String>();
second.put("name", "peogeot");
second.put("doors", "3");
second.put("color", "red");
//put those two maps into the array of maps
cars[0] = first;
cars[1] = second;
Run Code Online (Sandbox Code Playgroud)
这个解决方案不是很方便,但它是最接近给定数据结构的方式.
不过,看来,每一个在你的PHP数组中的条目正好有三个属性:name,doors和color.在这种情况下,您可能希望Car使用这些成员变量创建一个类,并将它们存储在一个数组中.这看起来像这样:
public class Car {
//member variables
public String name;
public int doors;
public String color;
//constructor
public Car(String name, int doors, String color) {
this.name = name;
this.doors = doors;
this.color = color;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,当你上课时Car,你可以创建一个包含所有汽车的数组:
Car[] cars = new Car[2];
cars[0] = new Car("vauxhall", 5, "black");
cars[1] = new Car("peogeot", 3, "red");
Run Code Online (Sandbox Code Playgroud)
这是在Java中执行此操作的更好方法.