java - ListUtils.intersection 中结果列表的顺序

标签 java algorithm apache-commons

我试图找到两个列表之间的交集。我用 Apache Commons ListUtils.intersection 做了一些测试,根据经验发现结果中的元素以第二个列表顺序返回。

ListUtils.intersection(asList(1,2,3,4),asList(3,1,2,6,7)

=[3, 1, 2]

此行为是否指定为在未来保持一致?我找不到任何引用。

最佳答案

诀窍在于org.apache.commons.collections.ListUtils.intersection的实现

对于列表的迭代,采用了更大的列表,在您的情况下,列表 2 大于列表 1,因此您总是从列表 2 中获得结果。

行为是

If list 2 is having more elements or equal number of elements to list 1 then the result order will be in the list 2 order.

If list 1 is having more elements than list 2 then the result order will be in the list 1 order.

完成这项工作的 org.apache.commons.collections.ListUtils.intersection 的代码片段

public static <E> List<E> intersection(final List<? extends E> list1, final List<? extends E> list2) {

final List<E> result = new ArrayList<E>();
    List<? extends E> smaller = list1;
    List<? extends E> larger = list2;
    if (list1.size() > list2.size()) {
        smaller = list2;
        larger = list1;
    }

    final HashSet<E> hashSet = new HashSet<E>(smaller);

    for (final E e : larger) {
        if (hashSet.contains(e)) {
            result.add(e);
            hashSet.remove(e);
        }
    }
    return result;
}

可在此处获得 List Utils 的完整源代码 https://commons.apache.org/proper/commons-collections/apidocs/src-html/org/apache/commons/collections4/ListUtils.html

关于java - ListUtils.intersection 中结果列表的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45212513/

相关文章:

java - 无法借助 Java 中的同步方法获得答案

algorithm - "Who to follow"算法

java - 当我在 Heroku 上部署我的一项服务时出现“应用程序错误”

c# - 从数字数组中找出所有的加减法组合

python - 地下城游戏解决方案说明

java - 如何将 double 组转换为集合?

java - 如何在 Linux 终端中为 Java 使用 apache commons io?

java - apache-commons DescriptiveStatistics 给出错误的标准偏差?

javascript - Spring MVC 中的 Ajax post 请求

java - 在 Java 中使用 Selenium 单击按钮