Нужно найти несовпадающие элементы из двух массивов и записать их в третий массив. Мои знания помогают мне найти совпадающие элементы, и я это делаю без проблем. Но как быть с несовпадающими, я не могу додумать. Вот мой код с совпадающими элементами:
String[] first_arr = {"Den", "Michel", "Dana", "Sophie", "Clar"};
String[] sec_arr = {"Michel", "Sophie", "Clar"};
String[] res_arr = new String[first_arr.length];
int count = 0;
for (int i = 0; i < first_arr.length; i++) {
for (int j = 0; i < sec_arr.length; i++) {
if (first_arr[i].equals(sec_arr[i])) {
res_arr[count++] = first_arr[i];
}
}
}
Например, так (подразумевая, что в каждом из массивов нет дубликатов, иначе придётся чуть модифицировать)
Завести хэш-таблицу с парами (ключ - значение из массива; значение - логическое или счётчик)
Добавить все элементы в таблицу. Если элемент уже есть - сделать значение false, если нет - true
Вывести ключи со значением true.
Или так:
Отсортировать оба массива
Выполнить процедуру, аналогичную слиянию в mergesort, только при каждом изменении индексов запоминать кандидатов на вывод, и выводить их, если не нашлось пары
Не совсем понял условие, поэтому 2 варианта: удаляем все дублирующие, оставляем только те, которые не дублируются:
public class Main {
public static void main(String[] args) throws IOException {
String[] first_arr = {"Den", "Michel", "Dana", "Sophie", "Clar"};
String[] sec_arr = {"Michel", "Sophie", "Clar" };
/*************************************************************/
String [] res_arr = Stream.of(first_arr, sec_arr)
.flatMap(arr->Arrays.stream(arr))
.distinct()
.toArray(String[]::new);
System.out.println(Arrays.toString(res_arr));
/*************************************************************/
String [] res_arr1 = Arrays.stream(first_arr)
.filter(arr->!Arrays.stream(sec_arr).anyMatch(arr::equals))
.toArray(String[]::new);
System.out.println(Arrays.toString(res_arr1));
}
}
Получаем массив несовпадающих элементов из двух массивов:
String[] arr1 = {"Den", "Michel", "Dana", "Sophie", "Clar", "Dana"};
String[] arr2 = {"Michel", "Sophie", "Clar"};
String[] arr3 = Stream.of(arr1, arr2)
.flatMap(arr -> Arrays.stream(arr).distinct())
.collect(Collectors.groupingBy(e -> e, Collectors.counting()))
.entrySet().stream()
.filter(e -> e.getValue() == 1)
.map(Map.Entry::getKey)
.toArray(String[]::new);
System.out.println(Arrays.toString(arr3)); // [Dana, Den]
Все просто: значения обоих массивов пихаем в HashSet
, который гарантирует уникальность каждой записи, если имеется запись с идентичным хэшем, то добавление записи проваливается. Далее вываливаем полученный HashSet
в массив.
Итоговый код такой:
String[] first_arr = {"Den", "Michel", "Dana", "Sophie", "Clar"};
String[] sec_arr = {"Michel", "Sophie", "Clar"};
HashSet<String> hashSet=new HashSet();
for (String arr: first_arr)
hashSet.add(arr);
for (String arr: sec_arr)
hashSet.add(arr);
String[] res_arr = hashSet.toArray(new String[0]);
System.out.println(Arrays.toString(res_arr));
for (int i = 0; i< sec_arr.length(); i++){
for(int y = 0; y< first_arr.length(); y++){
If (sec_arr[i].equals(first_arr[y])
sec_arr[i] = " ";
first_arr[y] = " ";
}
}
Потом соеденяем два массива в строку, убираем лишние пробелы и делаем split() по пробелам и добавляем в новый массив стрингов. Както так. Это универсальный способ, но у тебя все проще, не нужно соеденять два массива в одну строку. Достаточно просто к большему массиву применить toString(). А дальше так же как я писал выше.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
я только начал изучать servlet'ы, и в интернете куча примеров с созданием Hello servletНо как создать более сложные не обьясняется
Я пишу приложение на Android с помощью XamarinВ приложении есть сервис, работающий в фоне и обращающийся к api