name asociativos array java associative-array

asociativos - Matriz asociativa de Java



associative array java (16)

¡En realidad, Java admite matrices asociativas que se llaman diccionarios!

¿Cómo puedo crear y obtener 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'';


A diferencia de los lenguajes como PHP, en Java, no hay matrices asociativas. Un método más conveniente para usar una matriz asociativa equivalente es usar un HashMap donde puede usar la clave de HashMap para proporcionar la calidad de matriz asociativa.


Bueno, yo también estaba en búsqueda de una matriz asociativa y encontré la Lista de mapas como la mejor solución.

import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class testHashes { public static void main(String args[]){ Map<String,String> myMap1 = new HashMap<String, String>(); List<Map<String , String>> myMap = new ArrayList<Map<String,String>>(); myMap1.put("URL", "Val0"); myMap1.put("CRC", "Vla1"); myMap1.put("SIZE", "Vla2"); myMap1.put("PROGRESS", "Vla2"); myMap.add(0,myMap1); myMap.add(1,myMap1); for (Map<String, String> map : myMap) { System.out.println(map.get("URL")); } //System.out.println(myMap); } }


Conjuntos asociativos en Java como en PHP:

SlotMap hmap = new SlotHashMap(); String key = "k01"; String value = "123456"; // Add key value hmap.put( key, value ); // check if key exists key value if ( hmap.containsKey(key)) { //..... } // loop over hmap Set mapkeys = hmap.keySet(); for ( Iterator iterator = mapkeys.iterator(); iterator.hasNext();) { String key = (String) iterator.next(); String value = hmap.get(key); }

Más información, consulte Clase SoftHashMap: https://shiro.apache.org/static/1.2.2/apidocs/org/apache/shiro/util/SoftHashMap.html


En JDK 1.5 (http://tinyurl.com/3m2lxju) hay incluso una nota: "NOTA: esta clase está obsoleta. Las nuevas implementaciones deberían implementar la interfaz de Map, en lugar de extender esta clase". Saludos, N.


En cuanto al comentario PHP ''No, PHP no le gustaría''. En realidad, PHP seguiría funcionando a menos que establezca unos niveles de excepción / error muy restrictivos (para PHP) (y tal vez ni siquiera entonces).

Lo que sucederá de forma predeterminada es que un acceso a un elemento de matriz variable / fuera de límites no existente ''desactive'' el valor que está asignando. NO, eso NO es nulo. PHP tiene un linaje Perl / C, por lo que entiendo. Entonces, existen: variables no establecidas y no existentes, valores que están configurados pero son valores NULL, Boolean False, y todo lo demás que tienen los lenguajes estándar. Debe probarlos por separado, O elija la evaluación DERECHA incorporada en la función / sintaxis.


Java no admite matrices asociativas, sin embargo, esto podría lograrse fácilmente utilizando un 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 a 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");

Ver la documentación oficial para más información


Java no tiene matrices asociativas como PHP.

Hay varias soluciones para lo que está haciendo, como usar un Mapa, pero depende de cómo quiera buscar la información. Puede escribir fácilmente una clase que contenga toda su información y almacenar instancias de ellos en una ArrayList .

public class Foo{ public String name, fname; public Foo(String name, String fname){ this.name = name; this.fname = fname; } }

Y entonces...

List<Foo> foos = new ArrayList<Foo>(); foos.add(new Foo("demo","fdemo")); foos.add(new Foo("test","fname"));

Para que pueda acceder a ellos como ...

foos.get(0).name; => "demo"


Java no tiene matrices asociativas, lo más cercano que puede obtener es la interfaz de Map

Aquí hay una muestra de esa página.

import java.util.*; public class Freq { public static void main(String[] args) { Map<String, Integer> m = new HashMap<String, Integer>(); // Initialize frequency table from command line for (String a : args) { Integer freq = m.get(a); m.put(a, (freq == null) ? 1 : freq + 1); } System.out.println(m.size() + " distinct words:"); System.out.println(m); } }

Si se ejecuta con:

java Freq if it is to be it is up to me to delegate

Obtendrás:

8 distinct words: {to=3, delegate=1, be=1, it=2, up=1, if=1, me=1, is=2}


Mire la interfaz de Map , y en la clase concreta HashMap .

Para crear un mapa:

Map<String, String> assoc = new HashMap<String, String>();

Para agregar un par clave-valor:

assoc.put("name", "demo");

Para recuperar el valor asociado con una clave:

assoc.get("name")

Y seguro, puedes crear una matriz de Mapas, ya que parece ser lo que quieres:

Map<String, String>[] assoc = ...


No existe una matriz asociativa en Java. Su pariente más cercano es un Map , que está fuertemente tipado, sin embargo tiene una sintaxis / API menos elegante.

Esto es lo más cercano que puede obtener basado en su ejemplo:

Map<Integer, Map<String, String>> arr = org.apache.commons.collections.map.LazyMap.decorate( new HashMap(), new InstantiateFactory(HashMap.class)); //$arr[0][''name''] = ''demo''; arr.get(0).put("name", "demo"); System.out.println(arr.get(0).get("name")); System.out.println(arr.get(1).get("name")); //yields null


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, utilizo Javatuples para proporcionarme la misma funcionalidad que existiría en otros idiomas. Un ejemplo de cómo lidiar con la pregunta es

Map<Pair<Integer, String>, String> arr = new HashMap<Pair<Integer, String>, String>(); Pair p1 = new Pair(0, "name"); arr.put(p1, "demo");

Me gusta este enfoque porque se puede extender a triples y otras agrupaciones ordenadas superiores con clases y métodos proporcionados por API.


Puedes lograr esto a través de Maps. Algo como

Map<String, String>[] arr = new HashMap<String, String>[2](); arr[0].put("name", "demo");

Pero a medida que empiece 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

class Person{ String name; String fname; } List<Person> people = new ArrayList<Person>(); Person p = new Person(); p.name = "demo"; p.fname = "fdemo"; people.add(p);


Utilice ArrayList <Map <String, String>>

Aquí una muestra de código:

ArrayList<Map<String, String>> products = new ArrayList<Map<String, String>>(); while (iterator.hasNext()) { Map<String, String> product = new HashMap<String, String>(); Element currentProduct = iterator.next(); product.put("id",currentProduct.get("id")); product.put("name" , currentProduct.get("name") ); products.add(product ); } System.out.println("products : " + products);

Salida:

productos: [{id = 0001, name = prod1}, {id = 0002, name = prod2}]



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

Sí, esto requiere iteración para buscar valor por clave, pero si los necesita a todos, esta será la mejor opción.