如何检查列表是否与另一个列表具有相同的元素,能够重复

时间:2016-09-19 16:24:34

标签: java list compare

我有2个列表,其中包含不同类型的城市名称:

ArrayList<City> list1 = new ArrayList<City>();
ArrayList<City> list2 = new ArrayList<City>();


list1.add(Birmingham);
list1.add(Amsterdam);
list1.add(Rotterdam);
list1.add(Brussels);

list2.add(Brussels);
list2.add(Brussels);
list2.add(Rotterdam);
list2.add(Amsterdam);
list2.add(Amsterdam);

如果我比较这两个列表,它应该是 true

如果我有第三个清单:

list3.add(brussELtss);
list3.add(Rotterdam);
list3.add(Amsterdam);

如果我将第三个列表与前两个列表中的任何一个进行比较,那么它应该是 false

我尝试过比较,等于和包含所有内容,但这不起作用。

1 个答案:

答案 0 :(得分:1)

您有set,请查看包含唯一元素的Hashset实现。您的对象City需要实现Comparable / Comparator来决定是否相等。在set中添加第一个元素,然后开始添加第二个列表,如果add方法返回true,则元素已经存在

更新: - 阅读评论后,我可以想到O(n)时间复杂度Algo

  1. 迭代第一个列表并构造一个地图(HashMap作为实现),其中元素为键并计为值

  2. 迭代第二个列表,如果元素在地图中不存在则不相等。

  3. 如果找到元素,请将地图

  4. 中该元素的计数减一
  5. 最后迭代地图,如果有一个数量不是零的元素,则列表不相等