这里有一种简单的方法:
- 使用
Map<Integer, List<Integer>>
- 迭代您的ArrayList。
- 查看地图中是否已经存在键。如果键已存在,则检索列表并将值添加到列表中,否则使用该值创建新列表。
程序:
class FooBar {
public static void main (String[] args) throws Exception {
int[][] data = {{0,1}, {0,2}, {1,2}, {1,3}};
Map<Integer, List<Integer>> myMap = new HashMap<>();
for(int i = 0; i < 4; i++) {
List<Integer> values = myMap.containsKey(data[i][0]) ?
myMap.get(data[i][0]) : new ArrayList<>();
values.add(data[i][1]);
myMap.put(data[i][0], values);
}
System.out.println(myMap);
}
}
输出:
{0=[1, 2], 1=[2, 3]}
这只是为了说明基本方法。您可以根据需要进行修改。例如,您可以使用String
而不是List<Integer>
,并选择将值附加到String
而不是添加到List
。
编辑:
这里有一个带有List<List<Integer>>
作为输入的示例程序。在这里,我假设此列表的名称为input
。
程序:
class FooBar {
public static void main (String[] args) throws Exception {
List<List<Integer>> input = new ArrayList<>();
input.add(new ArrayList<Integer>(){{add(0); add(1);}});
input.add(new ArrayList<Integer>(){{add(0); add(2);}});
input.add(new ArrayList<Integer>(){{add(1); add(2);}});
input.add(new ArrayList<Integer>(){{add(1); add(3);}});
Map<Integer, List<Integer>> myMap = new HashMap<>();
for(int i = 0; i < input.size(); i++) {
List<Integer> values = myMap.containsKey(input.get(i).get(0)) ?
myMap.get(input.get(i).get(0)) : new ArrayList<>();
values.add(input.get(i).get(1));
myMap.put(input.get(i).get(0), values);
}
System.out.println(myMap);
}
}
输出:
{0=[1, 2], 1=[2, 3]}