我正在开展一个项目,所以我将问题简化为:
鉴于两个按降序排序的arraylists,我想把它们的每个值都放到一个新的arraylist中。
新的arraylist最大容量为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是我想要返回的新arraylist。
给出的两个列表是对象列表,它们存储字符串(文档)和数字(频率)。
非常感谢任何帮助。
答案 0 :(得分:0)
如果我理解正确,你想要合并两个排序列表, 最多5个元素。 考虑这个通用逻辑:
重复searchList.size() < 5
和 l1ptr
不在第一个列表的末尾且 l2ptr
不是在第二个清单的末尾
重复searchList.size() < 5
和 l1ptr
不在第一个列表的末尾
重复searchList.size() < 5
和 l2ptr
不在第二个列表的末尾
最后,您将searchList
包含最多5个元素,并且订购正确
像这样:
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++;
}