Как объединить два arraylist в java
Перейти к содержимому

Как объединить два arraylist в java

  • автор:

Объединение списков в Java

Метод addAll(Collection c) класса java.util.ArrayList добавляет все элементы в указанной коллекции в конец этого списка в том порядке, в котором они возвращаются итератором указанной коллекции. Используя этот метод, вы можете объединить списки в Java.

Пример

import java.util.ArrayList; public class Sample < public static void main(String[] args) < ArrayListlist = new ArrayList(); list.add("JavaFx"); list.add("Java"); list.add("WebGL"); list.add("OpenCV"); System.out.println(list); ArrayList newList = new ArrayList(); list.add("HBase"); list.add("Neo4j"); list.add("MangoDB"); list.add("Cassandra"); list.addAll(newList); System.out.println(list); > >

Итог

[JavaFx, Java, WebGL, OpenCV] [JavaFx, Java, WebGL, OpenCV, HBase, Neo4j, MangoDB, Cassandra]

Средняя оценка 2.3 / 5. Количество голосов: 3

Спасибо, помогите другим — напишите комментарий, добавьте информации к статье.

Или поделись статьей

Видим, что вы не нашли ответ на свой вопрос.

Помогите улучшить статью.

Напишите комментарий, что можно добавить к статье, какой информации не хватает.

4.7. Java примеры – Как объединить два массива в один

В этом примере показано, как объединить два массива в один массив с помощью метода list.Addall(array1.asList(array2) класса List и метода Arrays.toString() класса Array.

import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class Main < public static void main(String args[]) < String a[] = < "А", "Б", "В" >; String b[] = < "Г", "Д" >; List list = new ArrayList(Arrays.asList(a)); list.addAll(Arrays.asList(b)); Object[] c = list.toArray(); System.out.println(Arrays.toString(c)); > > 

Результат

Вышеприведенный пример кода даст следующий результат:

[А, Б, В, Г, Д] 

Еще один пример соединения массивов в Java.

public class HelloWorld < public static void main(String[] args) < int[]a = ; int[]b = ; int[]c = new int[a.length+b.length]; int count = 0; for(int i = 0; i < a.length; i++) < c[i] = a[i]; count++; >for(int j = 0; j < b.length;j++) < c[count++] = b[j]; >for(int i = 0;i < c.length;i++) System.out.print(c[i]+" "); >> 

Вышеприведенный пример кода даст следующий результат:

1,2,3,4,4,16,1,2,3,22 

Оглавление

  • 1. Java примеры – Использование кода на практике
  • 2. Java примеры – Окружающая среда
  • 2.1. Java примеры – Скомпилировать файл
  • 2.2. Java примеры – Установить путь к нескольким классам
  • 2.3. Java примеры – Отладка java-файла
  • 2.4. Java примеры – Установить путь к классу
  • 2.5. Java примеры – Просмотреть текущий путь класса
  • 2.6. Java примеры – Установить назначение файла класса
  • 2.7. Java примеры – Запустить скомпилированный java-файл класса
  • 2.8. Java примеры – Узнать версию Java
  • 2.9. Java примеры – Установить путь к классу в .jar-файле или .zip-файле
  • 3. Java примеры – Строки
  • 3.1. Java примеры – Сравнить две строки
  • 3.2. Java примеры – Найти последнее вхождение подстроки внутри подстроки
  • 3.3. Java примеры – Удалить нужный символ из строки
  • 3.4. Java примеры – Заменить символ в строке
  • 3.5. Java примеры – Вывод в обратном порядке
  • 3.6. Java примеры – Нахождение символа или слова в строке
  • 3.7. Java примеры – Разбиение строки на слова и символы
  • 3.8. Java примеры – Преобразование строки в верхний регистр
  • 3.9. Java примеры – Найти слово в строке
  • 3.10. Java примеры – Сравнить производительность создания строки
  • 3.11. Java примеры – Оптимизировать создание строк
  • 3.12. Java примеры – Форматирование строк
  • 3.13. Java примеры – Конкатенация строк
  • 3.14. Java примеры – Определить код Юникода символа в строке
  • 3.15. Java примеры – Буферизация строк
  • 4. Java примеры – Массивы
  • 4.1. Java примеры – Сортировка массива и поиск элемента
  • 4.2. Java примеры – Метод сортировки массива, вставить элемент в массив
  • 4.3. Java примеры – Размер двумерного массива
  • 4.4. Java примеры – Обратный порядок массива, переворачиваем массив
  • 4.5. Java примеры – Как выводить массивы и двумерные массивы в консоль
  • 4.6. Java примеры – Найти максимальный и минимальный элемент массива
  • 4.7. Java примеры – Соединить два массива в один
  • 4.8. Java примеры – Как заполнить массив числами
  • 4.9. Java примеры – Увеличить массив после инициализации
  • 4.10. Java примеры – Сравнение двух массивов
  • 4.11. Java примеры – Удаление элемента из массива
  • 4.12. Java примеры – Удаление массива из другого массива
  • 4.13. Java примеры – Одинаковые элементы массивов
  • 4.14. Java примеры – Поиск в массиве
  • 4.15. Java примеры – Равенство двух массивов
  • 4.16. Java примеры – Сравнить массивы
  • 5. Java примеры – Дата и время
  • 5.1. Java примеры – Форматирование времени в формате AM-PM
  • 5.2. Java примеры – Получение названия и номера текущего месяца
  • 5.3. Java примеры – Получить текущее время в часах и минутах
  • 5.4. Java примеры – Вывести текущее время и дату
  • 5.5. Java примеры – Вывести текущее время в 24-часовом формате
  • 5.6. Java примеры – Получить текущий месяц
  • 5.7. Java примеры – Получить текущие секунды
  • 5.8. Java примеры – Получить короткое название месяца
  • 5.9. Java примеры – Получить день недели
  • 5.10. Java примеры – Добавление времени к дате
  • 5.11. Java примеры – Отображение времени в формате другой страны
  • 5.12. Java примеры – Отображение времени на разных языках
  • 5.13. Java примеры – Прокрутить часы и месяцы
  • 5.14. Java примеры – Получить номер недели и месяц в году
  • 5.15. Java примеры – Форматы текущей даты
  • 6. Java примеры – Методы
  • 6.1. Java примеры – Перезагрузка методов
  • 6.2. Java примеры – Вывод массива с использованием метода
  • 6.3. Java примеры – Решение Ханойской башни
  • 6.4. Java примеры – Последовательность чисел Фибоначчи
  • 6.5. Java примеры – Вычисление факториала числа
  • 6.6. Java примеры – Переопределение метода
  • 6.7. Java примеры – Вывод массива с использованием метода
  • 6.8. Java примеры – Использование оператора break
  • 6.9. Java примеры – Использование оператора continue
  • 6.10. Java примеры – Использование метки в методе
  • 6.11. Java примеры – Использование операторов enum и switch
  • 6.12. Java примеры – Использование конструктора enum

Обьединить два упорядоченных arraylist’a так, чтобы результирующий остался упорядоченным

Организовал через ArrayList, заполнил случайными значениями, отсортировал.
Теперь нужно в 1й массив добавлять эл-ты из второго, таким образом что бы первый остался отсортированым.

Помогите с циклом, пожалуйста)

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Объединить массивы так, чтобы результирующий массив С (размера 10) остался упорядоченным по возрастанию
6.Даны два массива А и В размера 5, элементы которых упорядочены по возрастанию. Объединить эти.

Объединить два упорядоченных массива так, чтобы результирующий массив остался упорядоченным
Даны два массива a и b размера n, элементы которых упорядочены по возрастанию. Объединить эти.

Объединить два массивы так, чтобы результирующий массив остался упорядоченным по возрастанию
Пожалуйста, помогите решить задачу, желательно с объяснениями! Даны два массива A и B размера 5.

Объединить массивы так, чтобы результирующий остался упорядоченным по убыванию
Даны три целочисленных массива A, B и C размера Na, Nb, Nc соответственно, элементы которых.

Эксперт 1С

842 / 605 / 211
Регистрация: 24.07.2013
Сообщений: 2,102
На массивах:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
public static int[] mergeSort(int[] array1, int[] array2) { int length = array1.length + array2.length; int[] array = new int[length]; int i = 0; int j = 0; for (int k = 0; k  length; k++) { if (i >= array1.length) { array[k] = array2[j++]; } else if (j >= array2.length) { array[k] = array1[i++]; } else if (array1[i] >= array2[j]) { array[k] = array1[i++]; } else { array[k] = array2[j++]; } } return array; }

любитель покушать
686 / 640 / 248
Регистрация: 25.09.2011
Сообщений: 1,313
Serg22,

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
import java.util.*; public class Test { public static void main(String[] args) { ListInteger> a = new ArrayList<>(); ListInteger> b = new ArrayList<>(); for (int i = 0; i  5; i++) { a.add((int) (Math.random() * 100)); } for (int i = 0; i  6; i++) { b.add((int) (Math.random() * 100)); } ComparatorInteger> comparator = (o1, o2) -> -Integer.compare(o1, o2); Collections.sort(a, comparator); Collections.sort(b, comparator); ListInteger> res = new ArrayList<>(); int i = 0; int j = 0; while(i  a.size() && j  b.size()) { if(a.get(i) > b.get(j)) { res.add(a.get(i)); ++i; } else { res.add(b.get(j)); ++j; } } while(i  a.size()) { res.add(a.get(i)); ++i; } while(j  b.size()) { res.add(b.get(j)); ++j; } System.out.println(a); System.out.println(b); System.out.println(res); } }

107 / 107 / 58
Регистрация: 04.03.2013
Сообщений: 479
Большое спасибо )
Упорядочивание по убыванию изменил немного:

Collections.sort(a,Collections.reverseOrder());

ЗЫ: А можно изменить что бы общее кол-во используемых массивов осталось два? т.е эл-ты добавлялись скажем в первый массив из второго?

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Объединить массивы так, чтобы результирующий массив C остался упорядоченным по возрастанию
1.Даны два массива A и B, элементы которых упорядочены по возрастанию. Объединить эти массивы так.

Объединить массивы так, чтобы результирующий массив остался упорядоченным по возрастанию
Даны два массива A и B, элементы которых упорядочены по возрастанию. Объединить эти массивы так.

Объединить массивы так, чтобы результирующий массив C остался упорядоченным по возрастанию
С помощью массива. Даны два массива A и B размера 5, элементы которых упорядочены по.

Объединить массивы так, чтобы результирующий массив остался упорядоченным по убыванию
Даны три целочисленных массива A, B и C размера NA, NB, NC соответственно, элементы которых.

Как объединить два ArrayList в один новый?

Как объединить два ArrayList в один новый? Раньше использовал обычный String[] , и функция выглядела так, но как поступить сейчас?

public static String[] ArrayAndArrayNewArray(String[] a, String[] b)

Отслеживать
33.9k 25 25 золотых знаков 130 130 серебряных знаков 222 222 бронзовых знака
задан 19 авг 2015 в 20:41
Denis Kotlyarov Denis Kotlyarov
2,854 3 3 золотых знака 26 26 серебряных знаков 53 53 бронзовых знака

У вас не ArrayList, а массивы(array). Вам действительно необходимо объединить два ArrayList’а, или все-таки 2 массива?

20 авг 2015 в 10:03
@NektoDev: ну два массива он вроде бы уже умеет. Представленный код как раз это и делает.
20 авг 2015 в 11:38

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

1. Без проверки на null

Вот достаточно простая и малооптимизированная реализация. Если этот участок не является узким местом в вашем приложении, то дальнейшая оптимизация, вероятно, не нужна. Не сработает, если один из аргументов будет равен null . Можно использовать, только если это внутренний код и вы достоверно знаете, что аргументы определены.

List listC = new ArrayList(listA); listC.addAll(listB); 

Должен заметить, что и в вашей реализации объединения массивов есть существенные уязвимости, связанные с null .

  1. Если один из списков == null , то метод вернет не новый массив, а один из старых.
  2. Если оба списка == null , то будет возвращен null , что вряд ли ожидаемо

Исправлять ошибки метода для объединения массивов следует в отдельном вопросе, а здесь я приведу код, который устойчив к аргументам со значением null .

2. Проверяем и молча пропускаем null

Метод обобщен согласно правилу PECS.

public static ArrayList joinLists( final List listA, final List listB) < boolean aEmpty = (listA == null) || listA.isEmpty(); boolean bEmpty = (listB == null) || listB.isEmpty(); //побитное И! if (aEmpty & bEmpty) < // оба пустые — отдаем новый пустой список return new ArrayList(); > else if (aEmpty) < // один пустой — отдаем копию другого, содержащую все его элементы return new ArrayList(listB); > else if (bEmpty) < return new ArrayList(listA); > else < // оба непустые — объединяем ArrayListresult = new ArrayList( listA.size() + listB.size()); result.addAll(listA); result.addAll(listB); return result; > > 

3. Проверяем null и бросаем исключения

/** * Join two lists and raise an exception if any is null * * @throws NullPointerException * if any parameter is null */ public static List joinLists2( final List listA, final List listB) < if (listA == null) < throw new NullPointerException("listA is null"); >if (listB == null) < throw new NullPointerException("listB is null"); >if (listA.isEmpty()) < return new ArrayList(listB); > else if (listB.isEmpty()) < return new ArrayList(listA); > else < ArrayListresult = new ArrayList( listA.size() + listB.size()); result.addAll(listA); result.addAll(listB); return result; > > 

Отслеживать
ответ дан 19 авг 2015 в 21:08
Nick Volynkin ♦ Nick Volynkin
33.9k 25 25 золотых знаков 130 130 серебряных знаков 222 222 бронзовых знака

ArrayList — это обёртка для обычного массива. Есть счётчик size , который считает, сколько элементов массива использовано.
По ходу того, как добавляются новые элементы, size увеличивается, а когда весь массив будет заполнен, ArrayList выделяет новый массив большей длины и копирует в него все элементы.
Отсюда следует, что наиболее эффективным будет такое заполнение списка, при котором внутренний массив будет достаточной длины, и не будет происходить выделение нового массива. Для этого, у ArrayList есть конструктор с int параметром, в котором указывается, на сколько элементов должен быть выделен массив изначально.

public static List joinLists(List a, List b) < if ((a == null) || (a.isEmpty() && (b != null))) return b; if ((b == null) || b.isEmpty()) return a; ArrayListresult = new ArrayList(a.size() + b.size()); // Закладываем размер достаточный для всех элементов result.addAll(a); result.addAll(b); return result; > 

Но, поскольку addAll внутри себя использует неявное создание временного массива, то, если заранее известно, что исходные списки — это ArrayList , то большей эффективности по памяти можно достичь следующим образом. Следует учесть, что вариант ниже позволяет избежать выделения лишних массивов и уменьшить затраты на сборку мусора (больная тема в Андроиде, особенно в ранних версиях), но он не обязательно эффективнее по скорости, скорее даже наоборот.

public static List joinLists(List a, List b) < if ((a == null) || (a.isEmpty() && (b != null))) return b; if ((b == null) || b.isEmpty()) return a; int aSize = a.size(); int bSize = b.size(); // Закладываем размер достаточный для всех элементов ArrayListresult = new ArrayList(aSize + bSize); // Если списки обеспечивают быстрый доступ к своим элементам, например ArrayList if ((a instanceof RandomAccess) && (b instanceof RandomAccess)) < for (int i = 0; i < aSize; i++) result.add(a.get(i)); for (int i = 0; i < bSize; i++) result.add(b.get(i)); >else < // А если это какие-то крестьянские списки, то копируем по-крестьянски result.addAll(a); result.addAll(b); >return result; > 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *