繁体   English   中英

将两个数组列表排序到一个新的排序列表中

[英]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

    • 当您有5个元素或到达列表之一的末尾时,循环将停止
  • searchList.size() < 5 并且 l1ptr不在第一个列表的末尾时重复

    • 当您有5个元素或到达第一个列表的末尾时,循环将停止
    • 请注意,如果您已经到达第一个循环中第一个列表的末尾,那么此循环将不执行任何操作
  • searchList.size() < 5 l2ptr不在第二个列表的末尾时重复

    • 当您有5个元素或到达第二个列表的末尾时,循环将停止
    • 请注意,如果您已经在第一个循环中到达第二个列表的末尾,那么此循环将完全不执行任何操作
  • 最后,您将拥有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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM