javaarraylistunordered

Java compare unordered ArrayLists


anybody know an efficient way to decide if two arraylists contain the same values?

Code:

ArrayList<String> dummy1= new ArrayList<String>();
list1.put("foo");
list1.put("baa");

ArrayList<String> dummy2= new ArrayList<String>();
list1.put("baa");
list1.put("foo");

dummy1 == dummy2

the challenge is that the arraylists has not the same value order..

(foo, baa) == (foo, baa) // per definition :)

i need to get this

(foo, baa) == (baa, foo) // true

so what would be your approach?


Solution

  • Just sort it first.

    public  boolean equalLists(List<String> one, List<String> two){     
        if (one == null && two == null){
            return true;
        }
    
        if((one == null && two != null) 
          || one != null && two == null
          || one.size() != two.size()){
            return false;
        }
    
        //to avoid messing the order of the lists we will use a copy
        //as noted in comments by A. R. S.
        one = new ArrayList<String>(one); 
        two = new ArrayList<String>(two);   
    
        Collections.sort(one);
        Collections.sort(two);      
        return one.equals(two);
    }
    

    Honestly, you should check your data structure decision. This seems more like a set problem. Sorting then comparing will take O(nlog n) while a HashSet comparison will only be O(n).