Решил такую задачку: на вход метода поступают n массивов строк, нужно определить дубликаты ли эти массивы игнорируя порядок и число объектов. Например массивы {"1", "z"} и {"1", "z", "1", "z", "1", "z", "1"} эквивалентны. А {"1", "z"} и {"0", "z"} нет. {"1", "z"} и {"z"} тоже нет.
мое решение
public static boolean allStringSetsIdentical(String[][] sets) {
boolean bool = true;
Set<String> set = new HashSet<>();
List<String> listOfStrings = null;
for (String[] s : sets) {
for (String str : s) {
set.add(str);
}
}
for (String[] s : sets) {
listOfStrings = new ArrayList<String>();
Collections.addAll(listOfStrings, s);
for (String str : set) {
if (!listOfStrings.contains(str)) {
return false;
}
}
}
return bool;
}
прошу подсказать как сделать оптимальной. Спасибо.
public static boolean allStringSetsIdentical(String[][] sets) {
int maxSize = 0;
Set<String> set = new HashSet<>();
for (String[] s : sets) {
if (s.length>maxSize && new HashSet(Arrays.asList(s)).size()>maxSize) maxSize=s.length;
Collections.addAll(set, s);
}
return set.size()==maxSize;
}
Сет гарантирует уникальность элементов, следовательно, при добавлении всех элементов в него размер сета должен быть равен размеру самого большого массива, тогда и элементы эквиваленты.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Есть файл с набором методов для selenium WebDriver на javaИ есть тест
В приложения хочу сделать два Navigation Drawer как в приложении Stack Exchangeесть ли где нибудь тутариулы на эту задачу?
Хочу запустить и использовать данный проект который предназначен для: установки и запускаapk файлов на множестве подключенных к компьютеру...