Java 从集合的ArrayList中删除重复项| ArrayList<;设置<;字符串>&燃气轮机;tmp
我有一组字符串的数组列表<代码>阵列列表tmp 我需要使用这种类型的数据结构,因为我的要求。我如何从中删除重复项 例如,如何转换Java 从集合的ArrayList中删除重复项| ArrayList<;设置<;字符串>&燃气轮机;tmp,java,arraylist,set,Java,Arraylist,Set,我有一组字符串的数组列表阵列列表tmp 我需要使用这种类型的数据结构,因为我的要求。我如何从中删除重复项 例如,如何转换 [[A, B, C], [B, A, C], [C, D, E], [E, C, D]] 到 我确实在这里浏览了其他类似的答案,但它们将所有项目连接到一个列表中,例如上面的示例[[A,B,C,D,E,F] 我不想用一种方法来做到这一点: List<Set<String>> tmp = new ArrayList<>();
[[A, B, C], [B, A, C], [C, D, E], [E, C, D]]
到
我确实在这里浏览了其他类似的答案,但它们将所有项目连接到一个列表中,例如上面的示例[[A,B,C,D,E,F]
我不想用一种方法来做到这一点:
List<Set<String>> tmp = new ArrayList<>();
tmp.add(new HashSet<>(List.of("A", "B", "C")));
tmp.add(new HashSet<>(List.of("B", "A", "C")));
tmp.add(new HashSet<>(List.of("C", "D", "E")));
tmp.add(new HashSet<>(List.of("E", "C", "D")));
Iterator<Set<String>> it = tmp.iterator();
while (it.hasNext())
{
Set<String> currentSet = it.next();
for (Set<String> set : tmp)
{
if (currentSet != set
&& currentSet.containsAll(set)
&& currentSet.size() == set.size())
{
it.remove();
break;
}
}
}
System.out.println(set);
与从任何其他ArrayList中删除重复项的方式相同 例如:
tmp.stream().distinct().collect(Collectors.toList())代码>
注意:这假设列表项实现了合适的equals
方法。正如他们应该做的那样。HashSet正在研究哈希算法
因此,如果您有两组包含相同值的字符串,那么该组的哈希代码将始终相同(因为字符串在java中有特殊的分配)
所以你可以试试下面的方法
List<Set<String>> tmp = new ArrayList<Set<String>>();
tmp.add(new HashSet<>(Arrays.asList(new String[]{"A","B","C"})));
tmp.add(new HashSet<>(Arrays.asList(new String[]{"B","A","C"})));
tmp.add(new HashSet<>(Arrays.asList(new String[]{"C","D","E"})));
tmp.add(new HashSet<>(Arrays.asList(new String[]{"E","C","D"})));
List<Set<String>> list =new ArrayList<>();
for(Set<String> s: tmp){
if(!list.contains(s)){
list.add(s);
}
}
System.out.println(list);
[[A, B, C], [C, D, E]]
List<Set<String>> tmp = new ArrayList<Set<String>>();
tmp.add(new HashSet<>(Arrays.asList(new String[]{"A","B","C"})));
tmp.add(new HashSet<>(Arrays.asList(new String[]{"B","A","C"})));
tmp.add(new HashSet<>(Arrays.asList(new String[]{"C","D","E"})));
tmp.add(new HashSet<>(Arrays.asList(new String[]{"E","C","D"})));
List<Set<String>> list =new ArrayList<>();
for(Set<String> s: tmp){
if(!list.contains(s)){
list.add(s);
}
}
System.out.println(list);
[[A, B, C], [C, D, E]]