如何从java中的两个arraylists获取常用项?

时间:2014-04-29 06:19:30

标签: java arraylist

我有两个字符串列表,每个列表中包含大约100个字符串项,其中一些是常见的。

我想获取两个列表共有的项目并将其存储在另一个列表中。

如何做到这一点。请帮忙。

3 个答案:

答案 0 :(得分:1)

您可以使用List

的retainAll方法
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class MainClass {
  public static void main(String args[]) {
    String orig[] = { "a", "b", "b", "c" };
    String act[] = { "x", "b", "b", "y" };
    List origList = new ArrayList(Arrays.asList(orig));
    List actList = Arrays.asList(act);
    origList.retainAll(actList);
    System.out.println(origList);
  }
}

这将打印[b,b]

答案 1 :(得分:1)

尝试Collection#retainAll()

listA.retainAll(listB);

答案 2 :(得分:1)

你想要什么叫做集合交集。 (或多集,如果你想看到几个副本。)

简单而有效的解决方案是对两个数组进行排序并迭代它们。

for(int i = 0; i < a.length(); )
{
    for(int j = 0; j < b.length(); )
    {
        int comparison = a[i].compareTo(b[j]);
        if(comparison == 0)
        {
            // Add a[i] or b[j] to result here.
            // If you don't want duplicate items
            // in result, compare a[i] to
            // last item in result and add 
            // only if a[i] is strictly greater.

            ++i;
            ++j;
        }
        else if(comparison < 0)
            ++i;
        else
            ++j
    }
}

如果你的字符串足够长,你应该从第一个列表中添加HashSet字符串,并迭代第二个数组,检查元素是否已经设置。