比较两个arraylists并获得共同元素的位置

时间:2012-03-07 12:12:05

标签: java arraylist

我有两个arraylists,第二个是第一个的子集。 我想知道子集中元素的第一个arraylist中的初始和最终位置(在我的例子中,arrayList中的位置:uno,due,tre)

如何修改此代码?

import java.util.ArrayList;

public class ConfrontaArrayList {
public static void main(String[] args)
{
    ArrayList<String> arrayList = new ArrayList<String>();
    ArrayList<String> subSetArrayList = new ArrayList<String>();

    arrayList.add("inizio");
    arrayList.add("stringa");
    arrayList.add("uno");
    arrayList.add("due");
    arrayList.add("tre");
    arrayList.add("fine");
    arrayList.add("stringa");

    subSetArrayList.add("uno");
    subSetArrayList.add("due");
    subSetArrayList.add("tre");

    System.out.print("Elementi di arrayList: ");
    for (String stringa : arrayList) System.out.print(stringa + " ");
    System.out.print("\nElementi di subSetArrayList: ");
    for (String stringa : subSetArrayList) System.out.print(stringa + " ");
}
}  

4 个答案:

答案 0 :(得分:2)

java.util.Collections.indexOfSubList()方法将返回子列表的索引:

int startIdx = Collections.indexOfSubList(arrayList, subSetArrayList);
if (-1 != startIdx)
{
    int endIdx = startIdx + subSetArrayList.size() - 1;
}

答案 1 :(得分:1)

如果你无法解决整个问题,请将其分解为可以执行的较小步骤:

  1. 如何判断两个元素是否匹配?
  2. 鉴于1,您如何判断两个等长列表是否匹配?
  3. 鉴于2,您如何判断列表是否与较长列表中的给定索引匹配?
  4. 鉴于3,你怎么能回答你的问题?

答案 2 :(得分:0)

最简单的答案当然是遍历arraylist并执行String.equals()来查找索引。

答案 3 :(得分:0)

使用ArrayList的indexOf方法。

for(String item : subSetArrayList)
{
    int index = arrayList.indexOf(item);
}

第二个想法,如果SubsetArrayList项目的顺序和顺序相同。你可以这样做:

int startIndex = arrayList.indexOf(subSetArrayList.get(0));
int endIndex = startIndex + subSetArrayList.size() - 1;