【问题标题】:Java many arraylists - find common elementJava许多arraylists - 查找公共元素
【发布时间】:2012-10-18 18:32:25
【问题描述】:

我有一个应用程序可以生成许多数组列表,存储在一个集合中。所有的数组列表总是有一个共同的元素。

我需要弄清楚哪个是共同元素。我用两个列表和List.contains(...) 管理了这个,但需要将它扩展到多个列表。

我该怎么做?

【问题讨论】:

    标签: java search arraylist


    【解决方案1】:

    如果您将retainAll() 的所有List 转换为Set,您最终将得到集合中的所有公共元素。

    Set set =  new HashSet();
    for ( List list : yourLists ) 
    { 
        set.addAll( list );
    } 
    for ( List list : yourLists )
    {
        set.retainAll( list );
    }
    

    这几乎可以简单地优化为只遍历列表一次(并且使用的堆空间等于所有现有列表的大小加上第一个的额外大小> 列表),但出于说明目的,这个版本更好......

    干杯,

    【讨论】:

    • 我在看这个选项,但是由于集合是无序的,我如何确定最不常见的元素(即在所有列表中找到最低的元素)?
    • 根据定义,集合中的所有元素将在所有列表中出现相同的次数(即列表计数)。如果即使其中一个元素出现在比其他元素少一个的列表中,它也不会包含在最终集合中,不是吗?
    【解决方案2】:

    使用哈希表将每个数组列表中的唯一元素映射到其频率(即,即使同一数组列表中的元素多次出现,它也只能增加一次)。遍历哈希表,直到值等于数组列表的数量。对应的键就是我们要查找的元素。

    【讨论】:

      【解决方案3】:

      使用retainAll(),这样在每一步你都会有列表的交集

      list1.retainAll(list2);
      list1.retainAll(list3);
      

      所以这种方式list1 将是所有元素的交集。现在,如果要复制公共元素,则需要将最终列表添加到 Set 并完成。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-15
        • 2019-11-15
        • 1970-01-01
        • 1970-01-01
        • 2017-12-23
        • 2017-09-05
        相关资源
        最近更新 更多