Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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中对两个列表进行快速排序_Java_List_Sorting - Fatal编程技术网

如何在Java中对两个列表进行快速排序

如何在Java中对两个列表进行快速排序,java,list,sorting,Java,List,Sorting,我有两份清单: List<Object1> list1 List<Object2> list2 有没有人有快速排序的方法?使用集合在Java中快速排序列表 Collections.sort(list1); Collections.sort(list2); 如果在排序后比较值: for (Object1 o : list1) { for (Object2 p : list2) { if ((o.getSomeValue()).equals(p.getSom

我有两份清单:

List<Object1> list1
List<Object2> list2

有没有人有快速排序的方法?

使用集合在Java中快速排序列表

Collections.sort(list1);
Collections.sort(list2);
如果在排序后比较值:

for (Object1 o : list1) {
  for (Object2 p : list2) {
     if ((o.getSomeValue()).equals(p.getSomeValue())) list1.remove(o);
  }
}
对于这个,时间复杂度将是mxn。其中m是列表1的长度,n是列表2的长度

如果你关心时间的复杂性。一种更快的方法是在list2中循环,并将每个值添加到HashSet中。然后分别遍历列表1,并将这些值与HashSet中的值进行比较。基本上它应该是这样的,但是你必须用你的代码在这方面取得进展

HashSet<T> hSet = new HashSet<T>(); 

for (Object2 p : list2) {
   if (!hSet.contains(p.getSomeValue())) {
      hSet.add(p);
   } 
}

for (Object1 o : list1) {
   if (hSet.contains(o.getSomeValue())) {
      list1.remove(o);
   } 
}
时间复杂度=m+n,其中m是列表1的长度,n是列表2的长度

将Object2s中的所有PerID收集到哈希集中,然后从列表1中筛选出id在该集中的所有元素:

Set<Integer> ids = list2.stream()
        .map(x -> x.perId)
        .collect(toCollection(HashSet::new));
List<Object1> result = list1.stream()
        .filter(x -> !ids.contains(x.id))
        .collect(toList());
这假设您的id是int类型,因此您可能需要相应地更改它


此解决方案不要求您的两个类Object1和Object2具有equals或hashCode方法。

首先展示您的努力。.我们可以帮助您在遇到问题时找到问题。我们不是来做你的工作的。请检查此链接,你可以执行list1.removelist2,然后调用Arrays.sort方法对剩余的Entries进行排序快速是什么意思?您是否在寻找特定级别的效率?如果集合不包含p,则任何集合实现都会在集合内部执行添加p的操作,并且您不需要此if语句,您可以使用所有对象调用add。
Set<Integer> ids = list2.stream()
        .map(x -> x.perId)
        .collect(toCollection(HashSet::new));
List<Object1> result = list1.stream()
        .filter(x -> !ids.contains(x.id))
        .collect(toList());