Java 比较两个列表

2022-08-31 09:59:28

我有两个列表(不是java列表,你可以说两列)

例如

**List 1**            **Lists 2**
  milan                 hafil
  dingo                 iga
  iga                   dingo
  elpha                 binga
  hafil                 mike
  meat                  dingo
  milan
  elpha
  meat
  iga                   
  neeta.peeta    

我想要一个返回多少个元素相同的方法。对于此示例,它应该是3,并且它应该返回列表和不同值的相似值。

如果是,我应该使用哈希图,那么什么方法可以得到我的结果?

请帮忙

附言:这不是学校的作业:)所以如果你只是指导我,就足够了


答案 1

编辑

这里有两个版本。一种使用,其他使用ArrayListHashSet

比较它们并创建自己的版本,直到您得到所需的内容。

这应该足以涵盖:

附言:这不是学校的作业:)所以如果你只是指导我,就足够了

您问题的一部分。

继续原来的答案:

您可以为此使用和/或。java.util.Collectionjava.util.ArrayList

retainAll 方法执行以下操作:

仅保留此集合中包含在指定集合中的元素

请参阅此示例:

import java.util.Collection;
import java.util.ArrayList;
import java.util.Arrays;

public class Repeated {
    public static void main( String  [] args ) {
        Collection listOne = new ArrayList(Arrays.asList("milan","dingo", "elpha", "hafil", "meat", "iga", "neeta.peeta"));
        Collection listTwo = new ArrayList(Arrays.asList("hafil", "iga", "binga", "mike", "dingo"));

        listOne.retainAll( listTwo );
        System.out.println( listOne );
    }
}

编辑

对于第二部分(相似值),您可以使用 removeAll 方法:

删除此集合的所有元素,这些元素也包含在指定的集合中。

第二个版本还为您提供了重复的相似值和句柄(通过丢弃它们)。

这次可能是 a 而不是 a (不同之处在于,Set 不允许重复值)CollectionSetList

import java.util.Collection;
import java.util.HashSet;
import java.util.Arrays;

class Repeated {
      public static void main( String  [] args ) {

          Collection<String> listOne = Arrays.asList("milan","iga",
                                                    "dingo","iga",
                                                    "elpha","iga",
                                                    "hafil","iga",
                                                    "meat","iga", 
                                                    "neeta.peeta","iga");

          Collection<String> listTwo = Arrays.asList("hafil",
                                                     "iga",
                                                     "binga", 
                                                     "mike", 
                                                     "dingo","dingo","dingo");

          Collection<String> similar = new HashSet<String>( listOne );
          Collection<String> different = new HashSet<String>();
          different.addAll( listOne );
          different.addAll( listTwo );

          similar.retainAll( listTwo );
          different.removeAll( similar );

          System.out.printf("One:%s%nTwo:%s%nSimilar:%s%nDifferent:%s%n", listOne, listTwo, similar, different);
      }
}

输出:

$ java Repeated
One:[milan, iga, dingo, iga, elpha, iga, hafil, iga, meat, iga, neeta.peeta, iga]

Two:[hafil, iga, binga, mike, dingo, dingo, dingo]

Similar:[dingo, iga, hafil]

Different:[mike, binga, milan, meat, elpha, neeta.peeta]

如果它不能完全满足您的需求,它会给您一个良好的开端,以便您可以从这里开始处理。

读者问题:如何包含所有重复值?


答案 2

您可以从 CollectionUtils 尝试 intersection()subtract() 方法。

intersection()方法为您提供了一个包含公共元素的集合,该方法为您提供了所有不常见的元素。subtract()

他们也应该照顾类似的元素


推荐