Страницы

Поиск по вопросам

вторник, 25 февраля 2020 г.

Объединить два массива, только совпадающие элементы

#java #массивы


long[] a = new long[]{45017,96741,11751,23772,58825};
long[] b = new long[]{23772,88781,23777};


Как 2 массива объединить в один, чтобы в новом (третьем) массиве были только совпадающие
элементы, в данном случае 23772 ?
    


Ответы

Ответ 1



Как вариант: private static List asList(long[] array) { List res = new ArrayList<>(array.length); for (long l : array) { res.add(l); } return res; } public static void main(String[] args) { long[] a = new long[]{45017,96741,11751,23772,58825}; long[] b = new long[]{23772,88781,23777}; List cList = asList(a); cList.retainAll(asList(b)); System.out.println(cList); }

Ответ 2



На Java-8: long[] result = LongStream.concat(Arrays.stream(a), Arrays.stream(b)).distinct().toArray();

Ответ 3



Вот решение с временной сложностью O(m + n): private static Long[] getIntersection (long[] a, long[] b) { HashSet aSet = new HashSet<>(), bSet = new HashSet<>(); for(int i = 0; i < a.length; i++) { aSet.add(a[i]); } for(int i = 0; i < b.length; i++) { bSet.add(b[i]); } ArrayList intersection = new ArrayList<>(); for(Long l : aSet) { if(bSet.contains(l)) { intersection.add(l); } } return intersection.toArray(new Long[]{}); }

Ответ 4



В верхнем цикле пробегайтесь по элементам 1-го массива Во внутреннем цикле сравнивайте элемент 1-го массива со всеми элементами второго до тех пор пока не будет совпадения. При совпадении помещайте совпавший элемент в список. Список преобразуйте в массив.

Комментариев нет:

Отправить комментарий