Java 如何提取两个有序列表的非交集部分?

Java 如何提取两个有序列表的非交集部分?,java,collections,Java,Collections,我想加入两个字符串列表。两个列表都有固定的顺序 问题:第二个列表部分包含第一个列表的“结束”。我永远不知道第一张清单的末尾有多少项位于第二张清单的顶部 例如: 第一份名单: testa testb testc testa testd testg 第二份名单: testa //from 1st testd //from 1st testg //from 1st textf testc testb testa 在这里,您可以看到第二个列表中的第一个元素是第一个列表中的“continued”。因此

我想加入两个字符串列表。两个列表都有固定的顺序

问题:第二个列表部分包含第一个列表的“结束”。我永远不知道第一张清单的末尾有多少项位于第二张清单的顶部

例如:

第一份名单:

testa
testb
testc
testa
testd
testg
第二份名单:

testa //from 1st
testd //from 1st
testg //from 1st
textf
testc
testb
testa
在这里,您可以看到第二个列表中的第一个元素是第一个列表中的“continued”。因此,我想从第二个列表中删除这3个项目,然后加入这两个列表


问:这种手术叫什么?可能已经有像apache commons CollectionUtils这样的框架可以执行这些操作了?

我不知道它是如何调用的(虽然它看起来有点像,但有额外的限制),我认为您不会找到内置的方法。但你可以这样写:

  • list 1
    长度
    n1
    list 2
    长度
    n2
  • 从项目
    i=max(0,n1-n2)
    开始,检查
    list1(i)==list2(n1-i-1)
  • 不断递增
    i
    ,直到找到匹配项
  • 比较子列表
    list1(i:n1)
    list2(0:n1-i-1)
    -如果它们匹配,您已经找到了您想要的,否则返回3

  • 这可能会提高效率。

    您可以使用不允许DUP的中间结构,然后将其转储到列表中。