我有一个ArrayList的ArrayList,如下所示:
s1_1,s1_2
s3_4,s3_5
s1_2,s1_3
s3_5,s27_1
此示例中的每一行都是一个ArrayList。例如,第一个ArrayList由两个元素(s1_1 and s1_2)
组成。
我需要的是组合具有共同元素的ArrayList。 例如,在上面的示例中,必须组合第一个和第三个ArrayList。此外,第二行和第四行必须创建一个新的ArrayList,其中包含所有元素。
为了便于理解,我正在研究文本中的共同引用。上面的示例显示s1_1
和s1_2
是文本中的共同引用。另一方面,第三行显示s1_2
和s1_3
也是共同参照物。所以,我希望有一个共同引用链,其中包括所有三个要素:s1_1
,s1_2
和s1_3
。
但是,我不知道怎么做!乍一看似乎很容易,但在实施过程中我感到困惑!
有什么建议吗?
答案 0 :(得分:1)
让我们假设您有一个要组合的ArrayLists列表(lists = List<ArrayList>
)。
所以我会做这样的事情
Set<ArrayList> answer = new HashSet<ArrayList>();
for (int i = 0 ; i < lists.size() ; i++) {
ArrayList list = lists.get(i);
Set<Integer> usedLists = new HashSet<Integer>();
ArrayList combinedList = new ArrayList();
for (Object obj : list) {
for (int j = i ; j < lists.size ; j++) {
ArrayList list2 = lists.get(j);
if (list2.contains(obj) && !usedLists.contains(j)) {
combinedList.addAll(list2);
usedLists.add(j);
}
}
}
answer.add(combinedList);
}
这样做是看每个列表。对于列表中的每个对象,查找包含它的列表,并添加包含它的列表的所有元素。添加列表后,我会跟踪哪些列表添加到新列表中(使用列表列表中的索引),这样如果两个列表有两个公共元素,则列表不会添加两次。
希望有所帮助!