Como posso criar e buscar matrizes associativas em Java, como posso no PHP?
Por exemplo:
$arr[0]['name'] = 'demo';
$arr[0]['fname'] = 'fdemo';
$arr[1]['name'] = 'test';
$arr[1]['fname'] = 'fname';
Como posso criar e buscar matrizes associativas em Java, como posso no PHP?
Por exemplo:
$arr[0]['name'] = 'demo';
$arr[0]['fname'] = 'fdemo';
$arr[1]['name'] = 'test';
$arr[1]['fname'] = 'fname';
Java não suporta matrizes associativas, no entanto, isso pode ser facilmente alcançado usando a Map
. Por exemplo,
Map<String, String> map = new HashMap<String, String>();
map.put("name", "demo");
map.put("fname", "fdemo");
// etc
map.get("name"); // returns "demo"
Ainda mais preciso para o seu exemplo (já que você pode substituir String por qualquer objeto que atenda às suas necessidades) seria declarar:
List<Map<String, String>> data = new ArrayList<>();
data.add(0, map);
data.get(0).get("name");
NullPointerException
se o mapa externo não contiver mapa para entrada0
. O PHP não é mais permissivo com $ arr [0] ['name'] (eu não conheço essa linguagem)?ArrayList
em quase todos os casos devido a diferenças de desempenho (inesperadas?). Mas isso é outra discussão.HashMap
, e certamente não sem fazer um benchmark intencional do comportamento e encontrar um melhor fator de carga para o seu caso de uso. O único motivo para especificar um tamanho inicial é se você souber com antecedência que o mapa será muito grande.HashMap
não desperdiça (muita) memória se estiver vazia, mas se você pretende criar um mapa grande, pode salvar vários redimensionamentos de matriz especificando seu tamanho antecipadamente.Java não possui matrizes associativas, como o PHP.
Existem várias soluções para o que você está fazendo, como usar um mapa, mas isso depende de como você deseja procurar as informações. Você pode escrever facilmente uma classe que contém todas as suas informações e armazenar instâncias delas em um arquivo
ArrayList
.E depois...
Então você pode acessá-los como ...
fonte
Você pode fazer isso através do Maps. Algo como
Mas, ao começar a usar Java, tenho certeza de que descobrirá que, se você criar uma classe / modelo que represente seus dados, serão suas melhores opções. eu faria
fonte
Não existe array associativo em Java. Seu parente mais próximo é um
Map
, que é fortemente tipado, mas possui sintaxe / API menos elegante.Este é o mais próximo que você pode chegar com base no seu exemplo:
fonte
LazyMap.decorate
eInstantiateFactory
?Veja a interface do mapa e a classe concreta HashMap .
Para criar um mapa:
Para adicionar um par de valores-chave:
Para recuperar o valor associado a uma chave:
E, com certeza, você pode criar uma matriz de mapas, pois parece ser o que você deseja:
fonte
Bem, eu também estava em busca de matriz associativa e encontrei a lista de mapas como a melhor solução.
fonte
Java equivalente ao hash do Perl
fonte
Java não possui matrizes associativas, o mais próximo que você pode obter é a interface do mapa
Aqui está um exemplo dessa página.
Se executado com:
Você terá:
fonte
Matrizes associativas em Java, como no PHP:
Mais informações, consulte Classe SoftHashMap: https://shiro.apache.org/static/1.2.2/apidocs/org/apache/shiro/util/SoftHashMap.html
fonte
Use ArrayList <Map <String, String>>
Aqui está um exemplo de código:
Resultado :
produtos: [{id = 0001, nome = prod1}, {id = 0002, nome = prod2}]
fonte
No JDK 1.5 (http://tinyurl.com/3m2lxju) há até uma nota: "NOTA: Esta classe é obsoleta. Novas implementações devem implementar a interface do Mapa, em vez de estender essa classe". Atenciosamente, N.
fonte
Sim, isso requer iteração para pesquisar valor por chave, mas se você precisar de todos eles, esta será a melhor opção.
fonte
Na verdade, o Java suporta matrizes associativas que são chamadas de dicionários!
fonte
Pensando mais sobre isso, gostaria de lançar as tuplas como uma maneira mais geral de lidar com esse problema. Embora as tuplas não sejam nativas do Java, eu uso o Javatuples para me fornecer a mesma funcionalidade que existiria em outros idiomas. Um exemplo de como lidar com a pergunta feita é
Eu gosto dessa abordagem porque ela pode ser estendida a triplos e outros agrupamentos de ordem superior com classes e métodos fornecidos pela API.
fonte
Em relação ao comentário do PHP 'Não, o PHP não gostaria'. Na verdade, o PHP continuaria fazendo chug, a menos que você defina alguns níveis de exceção / erro muito restritivos (para PHP), (e talvez nem isso ainda).
O que acontecerá por padrão é que o acesso a um elemento de matriz variável / fora dos limites não existente 'desativa' o seu valor ao qual você está atribuindo. NÃO, isso NÃO é nulo. PHP tem uma linhagem Perl / C, pelo que entendi. Portanto, existem: variáveis não definidas e não existentes, valores que SÃO configurados, mas são NULL, valores Boolean False, e tudo o mais que os idiomas padrão possuem. Você deve testá-los separadamente, OU escolher a função / sintaxe da avaliação DIREITA.
fonte