我试图用Java初始化List,但我想知道是否有更优雅的方法来初始化具有相同类型的多个列表。
到目前为止,我已完成以下工作:
List<Model> list1 = new List<>();
List<Model> list2 = new List<>();
List<Model> list3 = new List<>();
但是我试图初始化大约10个相同类型的不同列表,看起来非常难看。
我也尝试过:
List<Model> list1, list2, list3 = new List<>();
但这不起作用。
在搜索答案之后,我所能找到的是关于如何使用asList()
方法在一行中使用多个变量初始化数组的提示,但这不是我尝试的方法做。
这甚至可能吗?
答案 0 :(得分:3)
您可以使用Map
key
代表列表名称,value
代表List
Map<String,List<Model>> lists = new HashMap<>();
然后,您可以在for
循环中填充列表:
for(int i=0;i<10;++i) {
lists.put("list"+(i+1),new ArrayList<Model>());
}
您可以使用以下方式访问列表:
lists.get("list1").add(new Model(...));
lists.get("list2").add(new Model(...));
免责声明:我没有尝试编译此代码,因为我不在电脑上。
答案 1 :(得分:3)
如果您有10个列表或其他什么,那么就该考虑:可能您需要一个数组或列表列表。
List<List<Model>> lists = new ArrayList<>();
for(int i=0; i<10; i++) lists.add(new ArrayList<>());
// later in code instead of list5.add(...)
lists.get(5).add(...)
答案 2 :(得分:2)
List
是一个接口(抽象类型),无法实例化。您必须使用ArrayList
,如下所示。你可以尝试:
List<Model> list1 = new ArrayList<Model>(), list2 = new ArrayList<Model>();
答案 3 :(得分:1)
这应该也适用
List<Model> list1 = new ArrayList<Model>(), list2 = new ArrayList<Model>(), list3 = new ArrayList<Model>();
答案 4 :(得分:0)
您可以做的最接近的事情是
List<Model> a = new ArrayList<>(), b = new ArrayList<>(), c = new ArrayList<>(), d = new ArrayList<>();
但是你考虑的任何一种方法都会产生相同的内存消耗影响。
答案 5 :(得分:0)
这是我的答案:
@SuppressWarnings({"unchecked"})
List<Model>[] lists = new List[3];
for(List list : lists) {
list = new ArrayList<Model>();
}
List<Model> list1 = lists[0];
List<Model> list2 = lists[1];
List<Model> list3 = lists[2];