查找java中arraylist中的字符串之间的差异

ruyhziif  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(320)

关闭。这个问题需要细节或清晰。它目前不接受答案。
**想改进这个问题吗?**通过编辑这个帖子来添加细节并澄清问题。

两天前关门了。
改进这个问题

List<String> a = new ArrayList<>();
        a.add("test");
        a.add("test2");
        a.add("mark3");
        a.add("testtest");
        a.add("testapple");
        a.add("test1apple");
        a.add("markapple");
        a.add("testmark");
        a.add("test2");
        a.add("mark3");
        a.add("testapple1");

类似地,列表的大小是10000(可以超过10000)。在这里,我需要找到列表中存在的重复值是什么(test2,mark3)以及差异为1的值是什么(test,test2,testapple,test1apple,testapple1)
我需要在下面展示一些东西
重复:test2,mark3
1区别:test,test2,testapple,test1apple,testapple1
为此,我做了传统的方式循环列表得到如下结果

for(i=0;i<a.size();i++){
    for(j=i+1;j<a.size();j++){
       // logic
    }
}

不管我做的是正确的还是有其他方法可以实现,因为如果我使用上面的循环逻辑,我将面临性能问题

siotufzp

siotufzp1#

使用 Set 为了更好的表现。

List<String> a = new ArrayList<>();
a.add("test");
a.add("test2");
a.add("mark3");
a.add("testtest");
a.add("testapple");
a.add("markapple");
a.add("testmark");
a.add("test2"); // dup
a.add("mark3"); // dup
a.add("testapple1");
a.add("test2"); // triple

Set<String> set = new LinkedHashSet<>();
Set<String> dup = new HashSet<>();
for (String s : a)
    if (! set.add(s)) // add returns false if value already seen
        dup.add(s);
System.out.println("duplicates: " + dup);

for (String s : set) {
    if (s.length() > 1) {
        String base = s.substring(0, s.length() - 1);
        if (set.contains(base)) {
            System.out.println("1 difference: " + base + ", " + s);
        }
    }
}

输出

duplicates: [test2, mark3]
1 difference: test, test2
1 difference: testapple, testapple1

相关问题