[英]Sorting two arraylists into a new sorted list
我正在做一个项目,所以我已将问题简化为:
给定两个以降序排列的数组列表,我想获取它们的每个值并将它们放入新的数组列表中。
新的阵列列表的最大容量为5。
因此,这似乎很容易,也许我只是在想什么,但这是我的代码,我不断收到nullpointer异常,而且我没有任何想法
int l1ptr = 0;
int l2ptr = 0;
while(searchList.size() < 5 || (listOne.get(l1ptr) == null && listTwo.get(l2ptr) == null)){
if(listOne.get(l1ptr) == null){
searchList.add(listTwo.get(l2ptr).document);
l2ptr++;
}else{
if(listTwo.get(l2ptr) == null){
searchList.add(listOne.get(l1ptr).document);
l1ptr++;
}else{
if(listOne.get(l1ptr).frequency < listTwo.get(l2ptr).frequency){
searchList.add(listTwo.get(l2ptr).document);
l2ptr++;
}else{
if(listTwo.get(l2ptr).frequency < listOne.get(l1ptr).frequency){
searchList.add(listOne.get(l1ptr).document);
l1ptr++;
}else{
searchList.add(listOne.get(l1ptr).document);
l1ptr++;
}
}
}
}
SearchList是我要返回的新数组列表。
给定的两个列表是对象列表,它们同时存储字符串(文档)和数字(频率)。
任何帮助将非常感激。
如果我理解正确,则希望合并两个排序列表,最多5个元素。 考虑以下通用逻辑:
在searchList.size() < 5
且 l1ptr
不在第一个列表的末尾并且 l2ptr
不在第二个列表的末尾时l2ptr
当searchList.size() < 5
并且 l1ptr
不在第一个列表的末尾时重复
在searchList.size() < 5
且 l2ptr
不在第二个列表的末尾时重复
最后,您将拥有searchList
包含5个元素的searchList
,并且顺序正确
像这样:
while (searchList.size() < 5 && l1ptr < listOne.size() && l2ptr < listTwo.size()) {
if (listOne.get(l1ptr).frequency < listTwo.get(l2ptr).frequency) {
searchList.add(listTwo.get(l2ptr).document);
l2ptr++;
} else {
searchList.add(listOne.get(l1ptr).document);
l1ptr++;
}
}
while (searchList.size() < 5 && l1ptr < listOne.size()) {
searchList.add(listOne.get(l1ptr).document);
l1ptr++;
}
while (searchList.size() < 5 && l2ptr < listTwo.size()) {
searchList.add(listTwo.get(l2ptr).document);
l2ptr++;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.