¿Cómo puedo crear y buscar matrices asociativas en Java como puedo en PHP?
Por ejemplo:
$arr[0]['name'] = 'demo';
$arr[0]['fname'] = 'fdemo';
$arr[1]['name'] = 'test';
$arr[1]['fname'] = 'fname';
¿Cómo puedo crear y buscar matrices asociativas en Java como puedo en PHP?
Por ejemplo:
$arr[0]['name'] = 'demo';
$arr[0]['fname'] = 'fdemo';
$arr[1]['name'] = 'test';
$arr[1]['fname'] = 'fname';
Java no admite matrices asociativas, sin embargo, esto podría lograrse fácilmente utilizando a Map
. P.ej,
Map<String, String> map = new HashMap<String, String>();
map.put("name", "demo");
map.put("fname", "fdemo");
// etc
map.get("name"); // returns "demo"
Aún más preciso para su ejemplo (ya que puede reemplazar String con cualquier objeto que satisfaga sus necesidades) sería declarar:
List<Map<String, String>> data = new ArrayList<>();
data.add(0, map);
data.get(0).get("name");
NullPointerException
si el mapa externo no contiene un mapa para la entrada0
. ¿No es PHP más permisivo con $ arr [0] ['nombre'] (no conozco este lenguaje en absoluto)?ArrayList
en casi todos los casos debido a inesperados (?) Las diferencias de rendimiento. Pero esa es otra discusión.HashMap
, y ciertamente no sin comparar intencionalmente el comportamiento y encontrar un mejor factor de carga para su caso de uso. La única razón para especificar un tamaño inicial es si sabe de antemano que el mapa será muy grande.HashMap
no desperdicia (mucha) memoria si está vacía, pero si tiene la intención de crear un mapa grande, puede guardar varios tamaños de matriz especificando su tamaño por adelantado.Java no tiene matrices asociativas como PHP.
Existen varias soluciones para lo que está haciendo, como usar un Mapa, pero depende de cómo desee buscar la información. Puede escribir fácilmente una clase que contenga toda su información y almacenar instancias de ellos en un archivo
ArrayList
.Y entonces...
Para que pueda acceder a ellos como ...
fuente
Puede lograr esto a través de Maps. Algo como
Pero cuando comience a usar Java, estoy seguro de que encontrará que si crea una clase / modelo que represente sus datos, serán sus mejores opciones. yo lo haría
fuente
No existe una matriz asociativa en Java. Su pariente más cercano es a
Map
, que está fuertemente tipado, pero tiene una sintaxis / API menos elegante.Esto es lo más cercano que puede obtener según su ejemplo:
fuente
LazyMap.decorate
y quéInstantiateFactory
?Mire la interfaz de Mapa y la clase concreta HashMap .
Para crear un mapa:
Para agregar un par clave-valor:
Para recuperar el valor asociado con una clave:
Y claro, puede crear una serie de mapas, ya que parece ser lo que desea:
fuente
Bueno, también estaba buscando una matriz asociativa y encontré la Lista de mapas como la mejor solución.
fuente
Java equivalente al hash de Perl
fuente
Java no tiene matrices asociativas, lo más parecido que puede obtener es la interfaz de Mapa
Aquí hay una muestra de esa página.
Si se ejecuta con:
Obtendrás:
fuente
Matrices asociativas en Java como en PHP:
Más información, consulte Clase SoftHashMap: https://shiro.apache.org/static/1.2.2/apidocs/org/apache/shiro/util/SoftHashMap.html
fuente
Utilice ArrayList <Map <String, String>>
Aquí un ejemplo de código:
Salida:
productos: [{id = 0001, nombre = prod1}, {id = 0002, nombre = prod2}]
fuente
En JDK 1.5 (http://tinyurl.com/3m2lxju) hay incluso una nota: "NOTA: Esta clase es obsoleta. Las nuevas implementaciones deberían implementar la interfaz de Mapa, en lugar de extender esta clase". Saludos, N.
fuente
Sí, esto requiere iteración para buscar valor por clave, pero si los necesita todos, esta será la mejor opción.
fuente
¡En realidad, Java admite matrices asociativas que se llaman diccionarios!
fuente
Pensando más en ello, me gustaría descartar las tuplas como una forma más general de tratar este problema. Si bien las tuplas no son nativas de Java, yo uso las tuplas de Java para proporcionarme la misma funcionalidad que existiría en otros idiomas. Un ejemplo de cómo lidiar con la pregunta formulada es
Me gusta este enfoque porque puede extenderse a triples y otras agrupaciones de orden superior con clases y métodos proporcionados por API.
fuente
En cuanto al comentario de PHP 'No, a PHP no le gustaría'. En realidad, PHP seguiría funcionando a menos que establezcas algunos niveles de excepción / error muy restrictivos (para PHP) (y tal vez ni siquiera entonces).
Lo que PASARÁ por defecto es que un acceso a un elemento de matriz variable / fuera de límites no existente 'desarma' su valor al que está asignando. NO, eso NO es nulo. PHP tiene un linaje Perl / C, por lo que entiendo. Entonces hay: variables no establecidas y no existentes, valores que ESTÁN establecidos pero son NULOS, valores falsos booleanos, luego todo lo demás que tienen los idiomas estándar. Debe probarlos por separado, O elegir la función / sintaxis incorporada de la evaluación CORRECTA.
fuente