2012-03-07 87 views
1

我有两个阵列列表,第二个是第一个列表的子集。 我想知道元素的子集中的第一个ArrayList中的最初和最后的位置(在我的例子中的ArrayList中的位置:UNO,因为,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 + " "); 
} 
} 
+3

这功课吗?你试过什么了? – Mike 2012-03-07 12:14:26

+1

欢迎来到Stack Overflow。请阅读[如何问](http://stackoverflow.com/questions/how-to-ask),[你有什么尝试?](http://mattgemmell.com/2008/12/08/what-have - 你试过/),和[如何问问题的智能方式](http://catb.org/esr/faqs/smart-questions.html)。 – 2012-03-07 12:16:40

+0

只是一个举例来理解如何管理这种情况 – scirer 2012-03-07 12:19:53

回答

2

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

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

谢谢你,你的回答非常有用 – scirer 2012-03-07 13:00:30

0

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

0

使用ArrayList的indexOf方法。

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

月2思想,如果SubsetArrayList项目在相同的顺序和contigous秩序。你可以做如下:

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

你可以发布完整的周期来解决我的问题吗? – scirer 2012-03-07 12:23:24

+0

完成周期是什么意思?你正在获取每个元素的索引。 – Azodious 2012-03-07 12:27:43

+0

请原谅我的英文,我的意思是“你能写出完整的解决方案吗?” – scirer 2012-03-07 12:58:38

1

如果你不能做到全问题分解成较小的步骤,你可以做:

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