Java ArrayList 和 HashMap 动态
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/852822/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Java ArrayList and HashMap on-the-fly
提问by Steve M
Can someone please provide an example of creating a Java ArrayList
and HashMap
on the fly? So instead of doing an add()
or put()
, actually supplying the seed data for the array/hash at the class instantiation?
可有人请提供创建一个Java的例子ArrayList
和HashMap
上飞?因此,不是执行add()
or put()
,而是在类实例化时实际为数组/散列提供种子数据?
To provide an example, something similar to PHP for instance:
举个例子,例如类似于 PHP 的东西:
$array = array (3, 1, 2);
$assoc_array = array( 'key' => 'value' );
采纳答案by bruno conde
List<String> list = new ArrayList<String>() {
{
add("value1");
add("value2");
}
};
Map<String,String> map = new HashMap<String,String>() {
{
put("key1", "value1");
put("key2", "value2");
}
};
回答by Jon Skeet
You mean like this?
你的意思是这样?
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");
Or are you interested in the ArrayList
constructor which takes a Collection<? extends E>
? For example:
或者您对ArrayList
采用 a的构造函数感兴趣Collection<? extends E>
吗?例如:
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);
回答by Steve McLeod
A nice way of doing this is using Google Collections:
这样做的一个好方法是使用Google Collections:
List<String> list = ImmutableList.of("A", "B", "C");
Map<Integer, String> map = ImmutableMap.of(
1, "A",
2, "B",
3, "C");
回答by cgp
Arrays can be converted to List
s:
数组可以转换为List
s:
List<String> al = Arrays.asList("vote", "for", "me"); //pandering
Note that this does notreturn an ArrayList
but an arbitrary List
instance (in this case it's an Array.ArrayList
)!
请注意,这并没有返回ArrayList
指任意的List
情况下(在这种情况下,它是一个Array.ArrayList
)!
Bruno's approach works best and could be considered on the fly for maps. I prefer the other method for lists though (seen above):
布鲁诺的方法效果最好,可以在地图上即时考虑。我更喜欢列表的其他方法(见上文):
Map<String,String> map = new HashMap<String,String>() {
{
put("key1", "value1");
put("key2", "value2");
}
};
回答by Yuval Adam
Use a nice anonymous initializer:
使用一个不错的匿名初始化程序:
List<String> list = new ArrayList<String>() {{
add("a");
add("b");
}};
Same goes for a Map:
地图也是如此:
Map<String, String> map = new HashMap<String, String>() {{
put("a", "a");
put("b", "b");
}};
I find this the most elegant and readable.
我觉得这是最优雅和可读的。
Other methods demand creating an array first, then converting it to a List - too expensive in my taste, and less readable.
其他方法需要先创建一个数组,然后将其转换为一个 List - 在我看来太昂贵了,而且可读性较差。
回答by Andreas Petersson
for short lists:
对于短名单:
List<String> ab = Arrays.asList("a","b");
回答by R. Oosterholt
For lists you can use Arrays.asListlike this:
对于列表,您可以像这样使用Arrays.asList:
List<String> stringList = Arrays.asList("one", "two");
List<Integer> intList = Arrays.asList(1, 2);
For Maps you could use this:
对于地图,您可以使用它:
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");
Note: in Java 9
you can use Map.of
Note2: Double Brace Initialization
for creating HashMaps as suggested in other answers has it caveats
注意:在Java 9
您可以使用Map.of
Note2:Double Brace Initialization
按照其他答案中的建议创建 HashMap 时,请注意