【问题标题】:What is the best equivalent solution in JAVA to a type-mixed multidimensional array in PHP?JAVA 中 PHP 中类型混合多维数组的最佳等效解决方案是什么?
【发布时间】:2017-06-27 05:05:18
【问题描述】:

我一直使用 PHP,而且我是 Java 新手。我现在已经阅读了一些关于 hashmaps、arraylist 等的教程,但是我现在很困惑哪一个对我来说是正确的选择。在 PHP 中,我曾经创建这样的数组:

$test['google']['color'] = "red";
$test['google']['value'] = 67;
$test['IBM']['color'] = "blue";
$test['apple']['value'] = 23;
.
.

我也想搜索键和值。在 Java 中什么是好的选择?

【问题讨论】:

  • 不是类型混合数组。您展示的是一个二维整数数组,其键是字符串。因此,在 Java 中将其表示为 Map of Maps 非常容易。但总的来说,您应该记住,您不应该在两种语言之间找到精确的等价物。相反,您应该找到正确的数据结构,以帮助您以当前语言正确解决问题,而不是强迫它看起来像其他语言。
  • 对不起,我的错!我需要一个类型混合的数组。感谢您的意见。这就是我问的原因。我不确定哪一个是正确的数据结构:)
  • 在这种情况下,问问自己——为什么类型是混合的?在 Java 中,您通常将具有共同点的对象收集在一起。使用混合类型数组通常是表示对象的一种懒惰方式。
  • 谢谢,但我还应该如何保存数据?我怎样才能分开“颜色”和“价值”,但仍然知道它们是为同一家公司服务的?我可以创建 2 个 Hashmap,例如“company,color”和“company,value”,但在我看来这代码很糟糕? :)

标签: java php arrays list multidimensional-array


【解决方案1】:

这不是类型混合数组,而是里面有关联数组的关联数组。最后你只有一种类型——整数。

Java 不支持关联数组,但是这可以使用 Map 轻松实现。

Map<String, Int> map = new HashMap<String, Integer>();
map.put("name", 1);
map.put("fname", 2);

map.get("name"); // returns 1

然后

Map<String, Map<String, Integer>> mapAssociated = new HashMap<String, Map<String, Integer>>;
mapAssociated,put('example', map);

但说实话。我不喜欢 php 中的关联数组,我更喜欢使用对象和集合。也许您从错误的角度考虑问题。

或者,第二种解决方案

Object[][] data = {
    {"mykey1", "myval1"},
    {"mykey2", "myval2"},
    {new Date(), new Integer(1)},
};

【讨论】:

  • 谢谢,我试试这个。但我在上面犯了一个错误。我需要一个类型混合数组,但您的解决方案似乎仍然是不错的选择?
  • 我现在不太确定。可能您需要重新考虑您到底需要什么,并可能创建具有良好属性的新类。
  • @johnboy,您可以在地图声明中将Integer 替换为Object。然后您将被允许放置任何类型的对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-26
相关资源
最近更新 更多