Java 从集合的ArrayList中删除重复项| ArrayList<;设置<;字符串>&燃气轮机;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<>();

我有一组字符串的数组列表<代码>阵列列表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<>();
    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]]