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");
}
};