Java ArrayList和HashMap即时

Ste*_*e M 50 java collections

有人可以提供一个创建Java ArrayList和动态的例子HashMap吗?那么在类实例化中实际提供数组/散列的种子数据,而不是做一个add()或者put()

举一个例子,类似于PHP的例子:

$array = array (3, 1, 2);
$assoc_array = array( 'key' => 'value' );
Run Code Online (Sandbox Code Playgroud)

bru*_*nde 96

List<String> list = new ArrayList<String>() {
 {
    add("value1");
    add("value2");
 }
};

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

  • 这有时很危险.您将获得对封闭类的引用,因为匿名内部类维护对其父对象的引用.这可能会导致垃圾收集和序列化问题. (7认同)
  • 我根本不喜欢双支撑初始化.为什么在简单初始化程序执行时也会创建一个新的(非静态)内部类? (4认同)
  • 这些方法很好.但是内容可以在创建后修改.不可改变的方法太棒了! (3认同)

Ste*_*eod 30

这样做的好方法是使用Google Collections:

List<String> list = ImmutableList.of("A", "B", "C");

Map<Integer, String> map = ImmutableMap.of(
  1, "A",
  2, "B",
  3, "C");
Run Code Online (Sandbox Code Playgroud)

  • Map.of 是 Java 9 的功能而不是 8! (9认同)
  • 500kB是一个很高的价格,只需这样做.如果唯一需要的是即时填写收藏,接受的答案是恕我直言最好的. (2认同)

cgp*_*cgp 30

数组可以转换为Lists:

List<String> al = Arrays.asList("vote", "for", "me"); //pandering
Run Code Online (Sandbox Code Playgroud)

请注意,这并没有返回ArrayList指任意的List情况下(在这种情况下,它是一个Array.ArrayList)!

布鲁诺的方法效果最好,可以动态考虑地图.我更喜欢列表的其他方法(如上所示):

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

  • 请注意,Arrays.asList不返回java.util.ArrayList,而是返回固定大小的java.util.Arrays $ ArrayList! (6认同)

Yuv*_*dam 7

使用一个不错的匿名初始化程序:

List<String> list = new ArrayList<String>() {{
    add("a");
    add("b");
}};
Run Code Online (Sandbox Code Playgroud)

地图也一样:

Map<String, String> map = new HashMap<String, String>() {{
    put("a", "a");
    put("b", "b");
}};
Run Code Online (Sandbox Code Playgroud)

我发现这是最优雅和可读的.

其他方法需要先创建一个数组,然后将其转换为List - 在我的口味中太贵,而且可读性较差.


And*_*son 7

简短列表:

    List<String> ab = Arrays.asList("a","b");
Run Code Online (Sandbox Code Playgroud)

  • 在源代码中进一步了解.数组有自己的内部ArrayList类,不支持add()或remove(). (3认同)

R. *_*olt 5

对于列表,您可以像这样使用Arrays.asList:

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

对于地图,您可以使用此:

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");
Run Code Online (Sandbox Code Playgroud)

注意:Java 9你可以使用Map.of
Note2:Double Brace Initialization按照其他答案中的建议创建HashMaps有一些注意事项