2017-02-09 6 views
-1

Я всегда работал с PHP, и я новичок в Java. Теперь я прочитал несколько руководств о хэшмапах, arraylist и т. Д., Но теперь я запутался, какой из них правильный выбор для меня. В PHP я использовал для создания таких массивов:Какое наилучшее эквивалентное решение в JAVA для смешанного многомерного массива в PHP?

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

Я также хочу найти ключ и значение. Что было бы хорошим выбором на Java?

+0

Возможный дубликат [Инициирование многомерный массив в Java] (http://stackoverflow.com/questions/1067073/initialising-a-multidimensional-array-in-java) –

+0

Это не смешанный тип. То, что вы показываете, представляет собой двумерный массив целых чисел, чьими ключами являются строки. Таким образом, на Java можно легко представить карту карт. Но в целом вы должны иметь в виду, что вы не должны найти точные эквиваленты между двумя языками. Скорее, вы должны найти правильную структуру данных, которая поможет вам правильно решить проблему на вашем текущем языке и не заставляет ее выглядеть похожим на другой язык. – RealSkeptic

+0

Извините, мой плохой! Мне нужен тип смешанного массива. Спасибо за советы. Вот почему я спрашиваю. Я не уверен, какая из них является правильной структурой данных :) – johnboy

ответ

0

Это не смешанный массив типов, а ассоциативный массив с ассоциативными массивами внутри. В итоге у вас есть только один тип - целое число.

Java не поддерживает ассоциативные массивы, однако этого легко достичь с помощью Карты.

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)}, 
}; 
+0

Спасибо, я попробую это. Но я сделал ошибку выше. Мне нужен смешанный массив типов, но кажется, что ваше решение будет по-прежнему хорошим выбором? – johnboy

+0

Теперь я не уверен. Вероятно, вам нужно пересмотреть то, что вам нужно, и, возможно, создать новый класс с хорошими свойствами. –

+0

@johnboy, вы можете заменить 'Integer' на' Object' в объявлении карты. Тогда вам будет разрешено помещать объекты любого типа. – ilya