Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何获取两个ArrayList的重复值?_Java_Arraylist_Duplicates_Array Merge - Fatal编程技术网

Java 如何获取两个ArrayList的重复值?

Java 如何获取两个ArrayList的重复值?,java,arraylist,duplicates,array-merge,Java,Arraylist,Duplicates,Array Merge,假设我有两个点的数组列表: (0,2)->(0,3)->(0,4) (0,2)->(0,3)->(0,6) 我想获得一个新列表:(0,2)->(0,3) 我该怎么做 当前解决方案 使用两个foreach循环逐元素比较这两个列表。我认为这是一种非常低效的方法。还有其他方法吗?您可以使用以下方法: 仅保留此列表中包含在指定集合中的元素(可选操作)。换句话说,从该列表中删除指定集合中不包含的所有元素 List first=。。。 第二个列表=。。。 第一,保留(第二); 如果列表较大,则将一个列表的元

假设我有两个点的数组列表:

  • (0,2)->(0,3)->(0,4)
  • (0,2)->(0,3)->(0,6)
  • 我想获得一个新列表:
    (0,2)->(0,3)

    我该怎么做

    当前解决方案

    使用两个foreach循环逐元素比较这两个列表。我认为这是一种非常低效的方法。还有其他方法吗?

    您可以使用以下方法:

    仅保留此列表中包含在指定集合中的元素(可选操作)。换句话说,从该列表中删除指定集合中不包含的所有元素

    List first=。。。
    第二个列表=。。。
    第一,保留(第二);
    
    如果列表较大,则将一个列表的元素添加到
    哈希集
    中,并迭代其他元素,同时继续将元素添加到
    哈希集
    包含的新列表中

    List<Point> list1 = new ArrayList<Point>(Arrays.asList(new Point[]{new Point(0,2), new Point(0,3), new Point(0,4)}));
    List<Point> list2 = new ArrayList<Point>(Arrays.asList(new Point[]{new Point(0,2), new Point(0,3), new Point(0,6)}));
    Set<Point> setList1 = new HashSet<Point>(list1);
    List<Point> intersection  = list2.stream().filter( l -> setList1.contains(l)).collect(Collectors.toList());
    
    list1=newarraylist(Arrays.asList(new Point[]{new Point(0,2)、new Point(0,3)、new Point(0,4)});
    List list2=新的ArrayList(Arrays.asList(新点[]{新点(0,2),新点(0,3),新点(0,6)});
    Set setList1=新哈希集(list1);
    List intersection=list2.stream().filter(l->setList1.contains(l)).collect(Collectors.toList());
    
    时间复杂性, 添加到Set=O(n),迭代list=O(k)时间哈希集查找O(1)
    ~O(n)

    他们应该有相同的顺序吗?中间是否有跳跃的点?跳过中间点?你这是什么意思?好吧,第二个问题只是另一个问题,如果顺序很重要的话。你可能想提到,JCF中有很多方法对应于集合论中的概念。无论如何+1。这并不比OPs解决方案更有效:它仍然是O(n^2)。使用
    Set
    进行
    second
    将使大型收藏更快。一个缺点是它会修改原始列表(因为OP表示新列表)
    List<Point> list1 = new ArrayList<Point>(Arrays.asList(new Point[]{new Point(0,2), new Point(0,3), new Point(0,4)}));
    List<Point> list2 = new ArrayList<Point>(Arrays.asList(new Point[]{new Point(0,2), new Point(0,3), new Point(0,6)}));
    Set<Point> setList1 = new HashSet<Point>(list1);
    List<Point> intersection  = list2.stream().filter( l -> setList1.contains(l)).collect(Collectors.toList());