如何在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());