【问题标题】:Comparing Java Lists比较 Java 列表
【发布时间】:2013-04-08 09:25:09
【问题描述】:

如果list1list2 共享至少1 个项目,我如何返回true

示例:list1 = (1,2,3) ... list2 = (2,3,4)

someFunction(list1, list2); // returns true

【问题讨论】:

  • Java Compare Two Lists 的可能重复项
  • 你有没有尝试过?
  • @chris,下面的用户loki 说了什么,但这似乎不是最佳选择。

标签: java


【解决方案1】:

看看Collections.disjoint 方法。如果是真的,那就没有共同点了。

【讨论】:

  • +1 看起来该方法试图通过根据几个因素决定迭代哪个集合以及使用contains 检查哪个集合来进行优化。 [source]
【解决方案2】:

就像 TofuBeer 说的,看看Collections.disjoint(如果我有任何声誉,我会支持他的......):

public void main() {
    List<Integer> list1 = Arrays.asList(1,2,3);
    List<Integer> list2 = Arrays.asList(2,3,4); 
    someFunction(list1, list2);
}

private boolean someFunction(List<Integer> list1, List<Integer> list2) {
    return ! Collections.disjoint(list1, list2);
}

【讨论】:

    【解决方案3】:

    如果空间不是问题,为什么不直接使用 HashMap?

    Iterator it1 = list1.iterator(), it2 = list2.iterator();
    Map <K, Integer> listmap = new HashMap <K, Integer> ();
    
    while (it1.hasNext() && it2.hasNext()) {
        K elem1 = it1.next(), elem2 = it2.next();
        if ((listmap.get(elem1) != null && listmap.get(elem1) == 2) || 
            (listmap.get(elem2) != null && listmap.get(elem2) == 1)) {
            return false;
        }
        else {
            listmap.put(elem1, 1);
            listmap.put(elem2, 2);
        }
    
    }
    return true
    

    这样,您不必遍历整个第二个数组来检查第一个数组的每个元素,因为将元素添加到哈希表是在摊销常数时间内发生的。

    顺便说一句,更快的解决方案是使用 Apache commons 中的 IntHashMap(或 Android 上的 SparseArray)。

    【讨论】:

      【解决方案4】:
      public boolean someFunction(List<T> l1,List<T> l2)
      {
          Iterator<T> i = l1.iterator();
          while(i.hasNext())
          {
              if(l2.contains(i.next())
                  return true;
          }
          return false;
      }
      

      【讨论】:

        【解决方案5】:

        使用“迭代器”遍历一个列表,并使用其他列表的包含方法来检查元素。不是吗?

        【讨论】:

        • 我想过这样做,但认为一定有更好的方法。
        猜你喜欢
        • 1970-01-01
        • 2011-02-15
        • 1970-01-01
        • 1970-01-01
        • 2013-06-10
        • 1970-01-01
        • 1970-01-01
        • 2010-09-09
        相关资源
        最近更新 更多