Есть ли какая-нибудь утилита, которая могла бы объединить два отсортированных массива?

Мне интересно, есть ли какие-нибудь утилиты (библиотеки) для объединения двух отсортированных массивов всего в 1 строку.

Конечно. Сортировка слиянием Google. Вы найдете их много. Вы знаете, что запросы на внешние ресурсы не по теме?

Elliott Frisch 27.10.2018 05:23

Я знаю сортировку слиянием, но я просто хотел бы, чтобы вспомогательная функция слияния поддерживала любую существующую библиотеку?

Adam Lee 27.10.2018 05:25

Это отвечает на ваш вопрос: Stream.concat(Arrays.stream(array1), Arrays.stream(array2)).sorted(comparator).toArray(ArrayClass‌​[]::new);

Jacob G. 27.10.2018 05:47

@JacobG. Я подозреваю, что временная сложность предложенного вами метода составляет O (n log (n)). Он отвечает на вопрос, но, похоже, делает гораздо больше, чем необходимо.

lakshayg 27.10.2018 05:55

@LakshayGarg Я согласен; Я никогда не говорил, что это эффективно;)

Jacob G. 27.10.2018 05:56
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
5
124
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Используйте CollectionUtils.collate из Apache Commons.

Из документации:

Merges two sorted Collections, a and b, into a single, sorted List such that the natural ordering of the elements is retained. Uses the standard O(n) merge algorithm for combining two sorted lists.

Вот пример

import static java.util.Arrays.asList;

import java.util.List;
import org.apache.commons.collections4.CollectionUtils;

public class MergeSortedArrays {
    public static void main(String[] args) {
        Integer a[] = new Integer[]{2, 4, 6, 8, 10};
        Integer b[] = new Integer[]{1, 3, 4, 5, 6};
        List<Integer> merged = CollectionUtils.collate(asList(a), asList(b));
    }
}

Библиотека также предоставляет еще несколько полезных перегрузок.

// 1. discards duplicates
static <O extends Comparable<? super O>> List<O> collate(Iterable<? extends O> a, Iterable<? extends O> b, boolean includeDuplicates)
// 2. uses a custom comparator
static <O> List<O> collate(Iterable<? extends O> a, Iterable<? extends O> b, Comparator<? super O> c)
// 3. uses a custom comparator and discards duplicates
static <O> List<O> collate(Iterable<? extends O> a, Iterable<? extends O> b, Comparator<? super O> c, boolean includeDuplicates)

Разве создание простой функции слияния не было бы лучше, чем добавление целой библиотеки для такой простой задачи?

У вас есть array1 (0,1,2,2,3,4) и array2 (0,2,4,5) и returnArray Посмотрите на первые 2 значения и выберите самое низкое, если они совпадают.

Добавьте это значение в returnArray.

Продолжайте удалять это значение из выбранного массива

Повторяйте процесс, пока не объедините

Вы можете просто увеличить целое число вместо удаления из-за проблем с эффективностью.

Редактировать Упс, не знал, что вы уже знаете сортировку слиянием

Правильно, добавление библиотеки только ради этой функции, вероятно, не такая уж хорошая идея. Однако ряд библиотек, таких как Google Guava и Apache Commons, почти всегда присутствует в любом java-проекте нетривиального размера / сложности. В таких случаях хорошо иметь хорошо протестированную библиотечную функцию, которая сделает всю работу за вас.

lakshayg 27.10.2018 06:00

Действительно. Я часто использую и гуаву, и обыкновенные в своих проектах, ура!

Ryan S. 27.10.2018 06:05

Другие вопросы по теме