Java Compare Two Lists

后端 未结 10 508
情深已故
情深已故 2020-11-22 13:25

I have two lists ( not java lists, you can say two columns)

For example

**List 1**            **Lists 2**
  milan                 hafil
  dingo               


        
相关标签:
10条回答
  • 2020-11-22 13:34

    I found a very basic example of List comparison at List Compare This example verifies the size first and then checks the availability of the particular element of one list in another.

    0 讨论(0)
  • 2020-11-22 13:44

    EDIT

    Here are two versions. One using ArrayList and other using HashSet

    Compare them and create your own version from this, until you get what you need.

    This should be enough to cover the:

    P.S: It is not a school assignment :) So if you just guide me it will be enough

    part of your question.

    continuing with the original answer:

    You may use a java.util.Collection and/or java.util.ArrayList for that.

    The retainAll method does the following:

    Retains only the elements in this collection that are contained in the specified collection

    see this sample:

    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 );
        }
    }
    

    EDIT

    For the second part ( similar values ) you may use the removeAll method:

    Removes all of this collection's elements that are also contained in the specified collection.

    This second version gives you also the similar values and handles repeated ( by discarding them).

    This time the Collection could be a Set instead of a List ( the difference is, the Set doesn't allow repeated values )

    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);
          }
    }
    

    Output:

    $ 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]
    

    If it doesn't do exactly what you need, it gives you a good start so you can handle from here.

    Question for the reader: How would you include all the repeated values?

    0 讨论(0)
  • 2020-11-22 13:52

    Assuming hash1 and hash2

    List< String > sames = whatever
    List< String > diffs = whatever
    
    int count = 0;
    for( String key : hash1.keySet() )
    {
       if( hash2.containsKey( key ) ) 
       {
          sames.add( key );
       }
       else
       {
          diffs.add( key );
       }
    }
    
    //sames.size() contains the number of similar elements.
    
    0 讨论(0)
  • 2020-11-22 13:52
    public static boolean compareList(List ls1, List ls2){
        return ls1.containsAll(ls2) && ls1.size() == ls2.size() ? true :false;
         }
    
    public static void main(String[] args) {
    
        ArrayList<String> one = new ArrayList<String>();
        one.add("one");
        one.add("two");
        one.add("six");
    
        ArrayList<String> two = new ArrayList<String>();
        two.add("one");
        two.add("six");
        two.add("two");
    
        System.out.println("Output1 :: " + compareList(one, two));
    
        two.add("ten");
    
        System.out.println("Output2 :: " + compareList(one, two));
      }
    
    0 讨论(0)
提交回复
热议问题