我有以下ArrayLists。
ArrayList<HashMap<Integer, Integer>> RP1 = new ArrayList<HashMap<Integer, Integer>>();
ArrayList<HashMap<Integer, Integer>> RP2 = new ArrayList<HashMap<Integer, Integer>();
我想在循环中为每个ArrayList添加一个HashMap。目前我正在添加它们:
RP1.add(new HashMap<Integer, Integer>());
RP1.add(new HashMap<Integer, Integer>());
RP2.add(new HashMap<Integer, Integer>());
RP2.add(new HashMap<Integer, Integer>());
有没有办法用for循环执行此操作?我目前的方法似乎效率低下。
答案 0 :(得分:0)
就效率而言,像你发布的展开循环将比任何循环结构更快。如果您对简洁性感兴趣并且有两个以上的变量,则可以考虑声明ArrayList
List<Map<Integer, Integer>>
而不是单独的变量。我还建议您program to an interface(将所有变量声明为接口类型[例如,List
]而不是实现类型[ArrayList
]):
List<List<Map<Integer, Integer>>> RPs = new ArrayList<>();
for (int i = 0; i < NUMBER_OF_ARRAYLISTS; i++) {
List<Map<Integer, Integer>> list = new ArrayList<>();
for (int j = 0; j < NUMBER_OF_MAPS_PER_LIST; j++) {
list.add(new HashMap<Integer, Integer>());
}
RPs.add(list);
}
如果您确实需要按名称访问每个List<Map<Integer, Integer>>
,但仍希望消除各个变量,则将外部结构声明为Map<String, List<Map<Integer, Integer>>
并按名称添加元素。但这些都不会让事情变得更有效率,只是(也许)更容易编程。
答案 1 :(得分:0)
尝试这样的事情。没有测试它。
example(RP1,RP2);
/* or example(RP1,RP1,RP2,RP2) */
public static void example(ArrayList<HashMap<Integer, Integer>> ... arrays){
for (int i = 0; i < arrays.length; i++)
arrays[i].add(new HashMap<Integer, Integer>());
}
更多信息:https://today.java.net/article/2004/04/13/java-tech-using-variable-arguments