java объединить два массива

Мне нужно соединить два String массивы в Java.

Какой самый простой способ сделать это?

58 ответов

Возможно, для Вашего проекта будут необходимы бесплатные векторные карты. На нашем сайте представлены карты для всех стран.

Я нашел однострочное решение из старой доброй библиотеки Apache Commons Lang.
ArrayUtils.addAll(T[], T. )

Вот простой метод, который объединит два массива и вернет результат:

Обратите внимание, что он не будет работать с примитивными типами данных, только с типами объектов.

Следующая немного более сложная версия работает как с объектными, так и с примитивными массивами. Это делается с помощью T вместо T[] в качестве типа аргумента.

Это также позволяет объединять массивы двух разных типов, выбирая наиболее общий тип в качестве типа компонента результата.

Можно написать полностью общую версию, которая может быть расширена для объединения любого числа массивов. Эти версии требуют Java 6, так как они используют Arrays.copyOf()

Обе версии избегают создания какого-либо посредника List объекты и использование System.arraycopy() обеспечить максимально быстрое копирование больших массивов.

Для двух массивов это выглядит так:

А для произвольного числа массивов (> = 1) это выглядит так:

С помощью Stream в Java 8:

Также есть версии для примитивных массивов:

  • Booleans.concat(first, second)
  • Bytes.concat(first, second)
  • Chars.concat(first, second)
  • Doubles.concat(first, second)
  • Shorts.concat(first, second)
  • Ints.concat(first, second)
  • Longs.concat(first, second)
  • Floats.concat(first, second)

Использование Java API:

Вы можете добавить два массива в две строки кода.

Это быстрое и эффективное решение, которое будет работать для примитивных типов, так как оба метода перегружены.

Вам следует избегать решений, включающих ArrayLists, потоки и т.д., Так как они должны будут выделять временную память без какой-либо полезной цели.

Вам следует избегать for циклы для больших массивов, поскольку они не эффективны. Встроенные методы используют функции блочного копирования, которые чрезвычайно быстры.

Решение 100% старой Java и без System.arraycopy (например, недоступно в GWT-клиенте):

Я недавно боролся с проблемами с чрезмерным вращением памяти. Если известно, что a и/или b обычно пустые, вот еще одна адаптация кода silvertab (также обобщенная):

Редактировать: в предыдущей версии этого поста говорилось, что повторное использование массива должно быть четко задокументировано. Как указывает Мартен в комментариях, в целом было бы лучше просто удалить операторы if, что исключает необходимость иметь документацию. Но опять же, эти операторы if были главной целью этой конкретной оптимизации. Я оставлю этот ответ здесь, но будьте осторожны!

Функциональная Java в библиотеке есть класс-оболочка для массива, который оснащает массивы такими удобными методами, как конкатенация.

Мне нужно объединить два String массива в Java.

Какой самый простой способ сделать это?

38 ответов

Я нашел однострочное решение из старой доброй библиотеки Apache Commons Lang.
ArrayUtils.addAll(T[], T. )

Если вы хотите работать с ArrayLists в решении, вы можете попробовать это:

Еще один, основанный на предложении SilverTab, но созданный для поддержки x количества аргументов и не требующий Java 6. Он также не является универсальным, но я уверен, что его можно сделать универсальным.

Вы можете попробовать этот метод, который объединяет несколько массивов:

Этот работает без знания каких-либо других классов / библиотек и т. Д. Он работает для любого типа данных. Просто замените String на что-нибудь вроде int , double или char . Это работает довольно эффективно.

Решение не на Java 8:

Вы можете попробовать это

U можете набрать свой массив .

Если вы используете этот способ, вам не нужно импортировать какие-либо сторонние классы.

Если вы хотите объединить String

Пример кода для объединения двух строковых массивов

Если вы хотите объединить Int

Пример кода для конкатенации двух целочисленных массивов

Вот метод Main

Мы также можем использовать этот способ.

Также есть версии для примитивных массивов:

  • Booleans.concat(first, second)
  • Bytes.concat(first, second)
  • Chars.concat(first, second)
  • Doubles.concat(first, second)
  • Shorts.concat(first, second)
  • Ints.concat(first, second)
  • Longs.concat(first, second)
  • Floats.concat(first, second)

Вы можете добавить два массива в две строки кода.

Это быстрое и эффективное решение, которое будет работать для примитивных типов, так как оба метода перегружены.

Вам следует избегать решений, включающих ArrayLists, потоки и т. Д., Так как они должны будут выделять временную память без какой-либо полезной цели.

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

Я недавно боролся с проблемами с чрезмерным вращением памяти. Если известно, что a и / или b обычно пусты, вот еще одна адаптация кода silvertab (также обобщенного):

Редактирование: в предыдущей версии этого поста говорилось, что повторное использование массива выглядит следующим образом должны быть четко документированы. Как указывает Мартен в комментариях, в целом было бы лучше просто удалить операторы if, что исключает необходимость иметь документацию. Но опять же, эти операторы if были главной целью этой конкретной оптимизации. Я оставлю этот ответ здесь, но будьте осторожны!

Библиотека Functional Java имеет класс-обертку для массива, который оснащает массивы такими удобными методами, как конкатенация.

Тип примитива предопределен языком Java и называется зарезервированным ключевым словом. Примитивные значения не разделяют состояние с другими примитивными значениями. Восемь примитивных типов данных, поддерживаемых языком программирования Java :

  • байт : byte тип данных – это 8-разрядное целое число со знаком в виде двоичного числа со знаком. Он имеет минимальное значение -128 и максимальное значение 127 (включительно). byte Тип данных может быть полезен для сохранения памяти в больших массивах, где экономия памяти действительно имеет значение. Они также могут быть использованы вместо int где их пределы помогают уточнить ваш код; тот факт, что диапазон переменной ограничен, может служить формой документации.
  • Короче говоря : short тип данных – это 16-разрядное целое число со знаком в виде двоичного числа со знаком. Он имеет минимальное значение -32 768 и максимальное значение 32 767 (включительно). Как с byte применяются те же правила: вы можете использовать short экономить память в больших массивах в ситуациях, когда экономия памяти действительно имеет значение.
  • int : int тип данных – это 32-разрядное целое число со знаком в виде двоичного числа со знаком. Он имеет минимальное значение -2 147 483 648 и максимальное значение 2 147 483 647 (включительно). Для целочисленных значений этот тип данных обычно является выбором по умолчанию, если только нет причины (как указано выше) выбрать что-то еще. Этот тип данных, скорее всего, будет достаточно большим для чисел, которые будет использовать ваша программа, но если вам нужен более широкий диапазон значений, используйте long вместо.
  • долго : long тип данных – это 64-разрядное целое число со знаком в виде двоичного числа со знаком. Он имеет минимальное значение -9,223,372,036,854,775,808 и максимальное значение 9,223,372,036,854,775,807 (включительно). Используйте этот тип данных, когда вам нужен диапазон значений, более широкий, чем те, которые предоставляются int ,
  • плавать : float тип данных – 32-битная IEEE 754 с плавающей запятой одинарной точности. Его диапазон значений выходит за рамки этого обсуждения, но указан в разделе «Типы, форматы и значения с плавающей запятой» в спецификации языка Java. Как и с рекомендациями для byte а также short , использовать float (вместо double ) если вам нужно сохранить память в больших массивах чисел с плавающей запятой. Этот тип данных никогда не должен использоваться для точных значений, таких как валюта. Для этого вам нужно будет использовать класс java.math.BigDecimal. Числа и Строки покрывают BigDecimal и другие полезные классы, предоставляемые платформой Java.
  • двойной : double тип данных – 64-битная IEEE 754 с плавающей запятой двойной точности. Его диапазон значений выходит за рамки этого обсуждения, но указан в разделе «Типы, форматы и значения с плавающей запятой» в спецификации языка Java. Для десятичных значений этот тип данных обычно является выбором по умолчанию. Как упоминалось выше, этот тип данных никогда не должен использоваться для точных значений, таких как валюта.
  • логическое : boolean Тип данных имеет только два возможных значения: true а также false , Используйте этот тип данных для простых флагов, которые отслеживают истинные / ложные условия. Этот тип данных представляет один бит информации, но его «размер» не является чем-то точно определенным.
  • символ : char тип данных – это один 16-битный символ Unicode. Имеет минимальное значение ‘u0000’ (или 0) и максимальное значение ‘uffff’ (или 65 535 включительно).

Ниже Java Code показывает, как сделать объединение в Java без использования Java Collection >

Оцените статью