Как я могу создавать и извлекать ассоциативные массивы в Java, как я могу в PHP?
Например:
$arr[0]['name'] = 'demo';
$arr[0]['fname'] = 'fdemo';
$arr[1]['name'] = 'test';
$arr[1]['fname'] = 'fname';
Как я могу создавать и извлекать ассоциативные массивы в Java, как я могу в PHP?
Например:
$arr[0]['name'] = 'demo';
$arr[0]['fname'] = 'fdemo';
$arr[1]['name'] = 'test';
$arr[1]['fname'] = 'fname';
Java не поддерживает ассоциативные массивы, однако этого легко достичь с помощью Map
. Например,
Map<String, String> map = new HashMap<String, String>();
map.put("name", "demo");
map.put("fname", "fdemo");
// etc
map.get("name"); // returns "demo"
Еще более точным для вашего примера (поскольку вы можете заменить String любым объектом, который соответствует вашим потребностям) будет объявление:
List<Map<String, String>> data = new ArrayList<>();
data.add(0, map);
data.get(0).get("name");
Смотрите официальную документацию для получения дополнительной информации
NullPointerException
если внешняя карта не содержит карту для входа0
. Разве PHP не разрешает использовать $ arr [0] ['name'] (я вообще не знаю этот язык)?ArrayList
почти во всех случаях из-за (неожиданных?) Различий в производительности. Но это другое обсуждение.HashMap
, и, конечно, не без преднамеренного сравнения поведения и поиска лучшего коэффициента загрузки для вашего варианта использования. Единственная причина указать начальный размер - если вы заранее знаете, что карта будет очень большой.HashMap
не тратит (много) памяти, если она пуста, но если вы намереваетесь создать большую карту, вы можете сохранить несколько размеров массива, указав его размер заранее.В Java нет ассоциативных массивов, как в PHP.
Существуют различные решения для того, что вы делаете, например, использование карты, но это зависит от того, как вы хотите искать информацию. Вы можете легко написать класс, который содержит всю вашу информацию и хранить ее экземпляры в
ArrayList
.А потом...
Таким образом, вы можете получить к ним доступ, как ...
источник
Вы можете сделать это через Карты. Что-то вроде
Но когда вы начнете использовать Java, я уверен, что вы обнаружите, что если вы создадите класс / модель, которая представляет ваши данные, ваши лучшие варианты. я бы сделал
источник
В Java нет такого понятия, как ассоциативный массив. Его ближайший родственник - a
Map
, который строго типизирован, однако имеет менее элегантный синтаксис / API.Это самое близкое, что вы можете получить на основе вашего примера:
источник
LazyMap.decorate
иInstantiateFactory
для чего?Посмотрите на интерфейс Map и конкретный класс HashMap .
Чтобы создать карту:
Чтобы добавить пару ключ-значение:
Чтобы получить значение, связанное с ключом:
И, конечно же, вы можете создать массив карт, как это кажется, что вы хотите:
источник
Ну, я также искал ассоциативный массив и нашел список карт как лучшее решение.
источник
Java-эквивалент хеша Perl
источник
Java не имеет ассоциативных массивов, самое близкое, что вы можете получить, это интерфейс Map
Вот пример с этой страницы.
Если запустить с:
Ты получишь:
источник
Ассоциативные массивы в Java как в PHP:
Дополнительную информацию см. В разделе Класс SoftHashMap: https://shiro.apache.org/static/1.2.2/apidocs/org/apache/shiro/util/SoftHashMap.html.
источник
Использовать ArrayList <Map <String, String>>
Вот пример кода:
Вывод :
продукты: [{id = 0001, name = prod1}, {id = 0002, name = prod2}]
источник
В JDK 1.5 (http://tinyurl.com/3m2lxju) есть даже примечание: «ПРИМЕЧАНИЕ. Этот класс устарел. Новые реализации должны реализовывать интерфейс Map, а не расширять этот класс». С уважением, Н.
источник
Да, это требует итерации для поиска значения по ключу, но если вам нужны все из них, это будет лучшим выбором.
источник
На самом деле Java поддерживает ассоциативные массивы, они называются словарями!
источник
Размышляя больше об этом, я хотел бы выбросить кортежи как более общий способ решения этой проблемы. Хотя кортежи не являются родными для Java, я использую Javatuples, чтобы предоставить мне ту же функциональность, которая существует в других языках. Пример того, как справиться с заданным вопросом:
Мне нравится этот подход, потому что он может быть распространен на тройки и другие группы более высокого порядка с помощью API и классов и методов.
источник
Что касается комментария PHP «Нет, PHP не понравится». На самом деле, PHP будет продолжать пускаться в пух, если вы не установите очень ограничительные (для PHP) уровни исключений / ошибок (и, возможно, даже тогда).
По умолчанию будет происходить то, что доступ к несуществующей переменной / элементу массива out of bounds 'отменяет' ваше значение, которое вы присваиваете. НЕТ, это НЕ НУЛЬ. PHP имеет родословную Perl / C, насколько я понимаю. Итак, есть: неустановленные и несуществующие переменные, значения, которые установлены, но имеют значение NULL, логические значения False, затем все остальное, что есть в стандартных языках. Вы должны проверить их отдельно, ИЛИ выбрать ПРАВУЮ оценку, встроенную в функцию / синтаксис.
источник