使用列表获取匹配项目索引的有效方法

Jay*_*Jay 8 java collections arraylist

我有两个列表A和B.我想找出A中与listB元素匹配的元素索引.像这样的东西:

ArrayList listA = new ArrayList();
listA.add(1);listA.add(2);listA.add(3);listA.add(4);
ArrayList listB = new ArrayList();
listB.add(2);listB.add(4);
ArrayList listC = new ArrayList();
for(int i=0; i<listB.size();i++) {
   int element = listB.get(i);
   for(int j=0; j<listA.size(); j++) {
      if(listA.get(j) == element) listC.add(j);
   }
}
Run Code Online (Sandbox Code Playgroud)

我想这是一个难看的方式.找到与B中所有元素匹配的A的所有索引的最佳方法是什么?我相信在集合api中存在一个名为containsAll的方法 - 不要认为它返回匹配的索引.

SwD*_*n81 6

如果你必须使用ArrayList,你可以创建一个HashSetArrayList.这将调用containsO(1).需要O(n)来创建HastSet.如果你可以从a开始HashSet,那将是最好的.

public static void main(String[] args) 
{
    List listA = new ArrayList();
    listA.add(1);
    listA.add(2);
    listA.add(3);
    listA.add(4);
    List listB = new ArrayList();
    listB.add(2);
    listB.add(4);
    Set hashset = new HashSet(listA);

    for(int i = 0; i < listB.size(); i++) 
    {
        if(hashset.contains(listB.get(i))) 
        {
            listC.add(i);
            System.out.println(i);
        }
    }   
}
Run Code Online (Sandbox Code Playgroud)