有人能提供一个创建Java ArrayList
和 HashMap
的示例吗?而不是通过add()
或put()
方法,而是在类实例化时提供数组/哈希表的初始数据。
为了举例说明,请提供类似于PHP的示例:
$array = array (3, 1, 2);
$assoc_array = array( 'key' => 'value' );
有人能提供一个创建Java ArrayList
和 HashMap
的示例吗?而不是通过add()
或put()
方法,而是在类实例化时提供数组/哈希表的初始数据。
为了举例说明,请提供类似于PHP的示例:
$array = array (3, 1, 2);
$assoc_array = array( 'key' => 'value' );
List<String> list = new ArrayList<String>() {
{
add("value1");
add("value2");
}
};
Map<String,String> map = new HashMap<String,String>() {
{
put("key1", "value1");
put("key2", "value2");
}
};
List.of()
(自Java 8起)和 Map.of()
(自Java 9起):List<String> list = List.of("A", "B", "C");
Map<Integer, String> map = Map.of(1, "A",
2, "B",
3, "C");
Java 7及更早版本可能会使用Google Collections:
List<String> list = ImmutableList.of("A", "B", "C");
Map<Integer, String> map = ImmutableMap.of(
1, "A",
2, "B",
3, "C");
数组可以转换为 List
:
List<String> al = Arrays.asList("vote", "for", "me"); //pandering
请确认翻译是否包括以下两条内容:
请注意,这不会返回一个ArrayList
,而是返回一个任意的List
实例(在本例中是Array.ArrayList
)!
Bruno的方法最好,可以考虑在映射中进行动态处理。但我更喜欢针对列表的另一种方法(如上所示):
Map<String,String> map = new HashMap<String,String>() {
{
put("key1", "value1");
put("key2", "value2");
}
};
对于短列表:
List<String> ab = Arrays.asList("a","b");
public static List asList(T... a) {
return new ArrayList<T>(a);
}
因此它只返回一个预初始化的ArrayList。 - Andreas Petersson使用一个好的匿名初始化器:
List<String> list = new ArrayList<String>() {{
add("a");
add("b");
}};
Map<String, String> map = new HashMap<String, String>() {{
put("a", "a");
put("b", "b");
}};
我认为这是最优雅和易读的方法。
其他方法需要先创建一个数组,然后将其转换为列表 - 在我看来太昂贵,而且不够易读。
对于列表,你可以像这样使用 Arrays.asList:
List<String> stringList = Arrays.asList("one", "two");
List<Integer> intList = Arrays.asList(1, 2);
对于地图,您可以使用这个:
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");
注意:在Java 9
中,您可以使用Map.of。
注意2:根据其他答案建议使用双括号初始化(Double Brace Initialization)
创建HashMap存在缺陷。
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");
或者你对接受Collection<? extends E>
的ArrayList
构造函数感兴趣吗?例如:
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);
public List buildList(String... items) {
return new ArrayList(Arrays.asList(items));
}
- Steve McLeod这个怎么样?
ArrayList<String> array = new ArrayList<String>(Arrays.asList("value1", "value2"));
我知道很多答案提供了类似的解决方案,但我认为这个更加精确和简洁。 如果你有很多值,你可能想这样做:
ArrayList<String> array = new ArrayList<String>(Arrays.asList(
"value1",
"value2",
"value3",
...
));