首页 > 解决方案 > 比较两个复杂的字符串数组列表

问题描述

我有 Two ArrayLists,其中存储了 String 值。列表可以是:大小不同,每个列表具有相同的值和不同的不匹配字符串。

例子:

List 1: "a","b","b","c","e","a","e","f","g";

List 2: "a","a","b","c","a","e","a","d","f","e","e","g";

我想要得到的结果是列表 1 与列表 2 相比的匹配值。因此,示例的结果将是:

结果:

[String] [pos L1] [pos L2]

["a"] [0] [0]

["b"] [1] [2]

["c"] [3] [3]

["e"] [4] [5]

["a"] [5] [6]

["e"] [6] [9]

["g"] [8] [11]

标签: javasortingarraylistcomparison

解决方案


执行两个嵌套循环,并从您在内部循环的最后一次迭代中停止的索引开始在第二个循环中进行迭代:

public static List<String> algo(List<String> l1, List<String> l2) {
        List<String> result = new ArrayList<>();

        int lastIndexFound = 0;

        for(int i = 0; i < l1.size(); i++) {
            for(int j = lastIndexFound; j < l2.size(); j++) {
                String list1element = l1.get(i);
                String list2element = l2.get(j);
                if(list1element.equals(list2element)) {
                    result.add(list1element);
                    lastIndexFound = j + 1;
                    break;
                }
            }
        }

        return result;
    }

用于检测 :

List<String> list = Lists.newArrayList("a","b","b","c","e","a","e","f","g");
List<String> list2 = Lists.newArrayList("a","a","b","c","a","e","a","d","f","e","e","g");

algo(list, list2).forEach(System.out::println);

这输出:

a
b
c
e
a
e
g

推荐阅读