【问题标题】:Compare two String Arraylists complex [closed]比较两个复杂的字符串数组列表[关闭]
【发布时间】:2024-01-23 08:51:02
【问题描述】:

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

例子:

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]

【问题讨论】:

  • 专业提示:提出问题时,请始终确保您已尝试解决它,并展示您尝试过的内容。这个问题很可能会被搁置,因为有太多的方法可以解决这个问题,而没有你身边的一些初始方向/代码 - 因此它被认为太宽泛了。

标签: java sorting arraylist comparison


【解决方案1】:

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

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

【讨论】:

  • 当列表之一为空时,您将不得不处理这种情况。在这种情况下,您可以返回其他列表或不返回任何内容 - 取决于您。
  • 谢谢,我会处理的
【解决方案2】:
ArrayList<yourElementType> resultsArray = new Arraylist<yourElementType>()

for (yourElementType e : List1){

if(List2.contains(e)){
resultsArray.add(e)
// if you want the exact position, use list2.indexof(e)
}

}

【讨论】:

  • 我想将两个数组中的重复项分开,我编辑了主帖。我希望现在更清楚
  • 看起来我的解决方案会返回相同的结果数组,不是吗?代码的一部分。更容易理解。并且没有索引出数组异常需要处理。我错过了什么?
最近更新 更多