Вот три решения.
Реализация, использующая метод удаления.
public static boolean same(List<String> list1, List<String> list2){
if (list1.size() != list2.size())
return false;
List<String> temp = new ArrayList<String>(list1);
temp.removeAll(list2);
return temp.size() == 0;
}
Решение, которое сортирует, затем сравнивает.
public static boolean same(List<String> list1, List<String> list2){
if (list1.size() != list2.size())
return false;
Collections.sort(list1);
Collections.sort(list2);
for (int i=0;i<list1.size();i++){
if (!list1.get(i).equals(list2.get(i)))
return false;
}
return true;
}
И, просто для удовольствия, вы можете сделать это, выполнив разницу слов между двумя массивами. Это было бы не самым эффективным, но оно работает и, возможно, может быть полезным.
public static boolean same(List<String> list1, List<String> list2){
Map<String,Integer> counts = new HashMap<String,Integer>();
for (String str : list1){
Integer i = counts.get(str);
if (i==null)
counts.put(str, 1);
else
counts.put(str, i+1);
}
for (String str : list2){
Integer i = counts.get(str);
if (i==null)
return false; /// found an element that's not in the other
else
counts.put(str, i-1);
}
for (Entry<String,Integer> entry : counts.entrySet()){
if (entry.getValue() != 0)
return false;
}
return true;
}
Могут ли массивы различной длины? – fge
Вы хотите, чтобы все элементы в A1 присутствовали в A2 независимо от порядка или порядка, также важного? –
Да размеры массивов могут быть разными. Порядок не важен. –