the questions interview interfaces framework example characteristics java collections

questions - java list



Java ArrayList y HashMap sobre la marcha (7)

¿Puede alguien proporcionar un ejemplo de creación de Java ArrayList y HashMap sobre la marcha? Entonces, ¿en lugar de hacer un add() o put() , realmente suministrando los datos de inicialización para el array / hash en la creación de instancias de clase?

Para dar un ejemplo, algo similar a PHP, por ejemplo:

$array = array (3, 1, 2); $assoc_array = array( ''key'' => ''value'' );


¿Quieres decir así?

public List<String> buildList(String first, String second) { List<String> ret = new ArrayList<String>(); ret.add(first); ret.add(second); return ret; } ... List<String> names = buildList("Jon", "Marc");

¿O está interesado en el constructor ArrayList que toma una Collection<? extends E> Collection<? extends E> ? Por ejemplo:

String[] items = new String[] { "First", "Second", "Third" }; // Here''s one way of creating a List... Collection<String> itemCollection = Arrays.asList(items); // And here''s another ArrayList<String> itemList = new ArrayList<String>(itemCollection);


Las matrices se pueden convertir a List s:

List<String> al = Arrays.asList("vote", "for", "me"); //pandering

Tenga en cuenta que esto no devuelve una ArrayList sino una instancia de List arbitraria (en este caso es una Array.ArrayList ).

El enfoque de Bruno funciona mejor y podría considerarse sobre la marcha para mapas. Aunque prefiero el otro método para listas (visto arriba):

Map<String,String> map = new HashMap<String,String>() { { put("key1", "value1"); put("key2", "value2"); } };


Para las listas, puede usar Arrays.asList esta manera:

List<String> stringList = Arrays.asList("one", "two"); List<Integer> intList = Arrays.asList(1, 2);

Para Maps, puedes usar esto:

public static <K, V> Map<K, V> mapOf(Object... keyValues) { Map<K, V> map = new HashMap<>(); K key = null; for (int index = 0; index < keyValues.length; index++) { if (index % 2 == 0) { key = (K)keyValues[index]; } else { map.put(key, (V)keyValues[index]); } } return map; } Map<Integer, String> map1 = mapOf(1, "value1", 2, "value2"); Map<String, String> map2 = mapOf("key1", "value1", "key2", "value2");

Nota: en Java 9 puedes usar Map.of
Nota 2: Double Brace Initialization de Double Brace Initialization refuerza para crear HashMaps como se sugiere en otras respuestas tiene caveats


Una buena forma de hacerlo es usar Google Collections :

List<String> list = ImmutableList.of("A", "B", "C"); Map<Integer, String> map = ImmutableMap.of( 1, "A", 2, "B", 3, "C");


Use un buen inicializador anónimo:

List<String> list = new ArrayList<String>() {{ add("a"); add("b"); }};

Lo mismo ocurre con un mapa:

Map<String, String> map = new HashMap<String, String>() {{ put("a", "a"); put("b", "b"); }};

Encuentro esto el más elegante y legible.

Otros métodos exigen primero crear una matriz y luego convertirla en una lista: demasiado cara en mi opinión y menos legible.


para listas cortas:

List<String> ab = Arrays.asList("a","b");


List<String> list = new ArrayList<String>() { { add("value1"); add("value2"); } }; Map<String,String> map = new HashMap<String,String>() { { put("key1", "value1"); put("key2", "value2"); } };