Как добавить элемент в конец массива java
Нужно добавить К элементов в конец массива. Массив объявлен у меня глобальным
public static int n,arr[];
Осуществляю ввод размера массива с клавиатуры:
Scanner in = new Scanner(System.in); System.out.println("Введите размер массива: "); n = in.nextInt(); arr = new int [n]; for (int i=0;i
Задаю вопрос выбор действия с массивом
Scanner s = new Scanner(System.in);< System.out.println("Выберите действие с массивом"); int i = s.nextInt(); switch (i) < case 1: DeleterSrArifmet(); break; case 2: AddKonec(); break;
Дальше пока ума не приложу, как быть!? Сортировать массив? Или перебирать массив циклом а потом вставлять со смещение? Подскажите как добавить?
Последний раз редактировалось allonemoon; 25.05.2017 в 09:56 .
| allonemoon |
| Посмотреть профиль |
| Найти ещё сообщения от allonemoon |
Класс ArrayList . Методы изменяющие данные в массиве
Пример. В примере формируется массив квадратов чисел от 1 до 10. Для добавления числа в конец массива используется метод add() .
import java.util.*; public class TrainCollections < public static void main(String[] args) < // Метод addAll() - добавить элемент в конец массива // 1. Создать массив из чисел типа Integer ArrayList AI = new ArrayList(); // 2. Добавить в массив квадраты чисел от 1 до 10 for (int i=1; i // 3. Вывести массив System.out.println(AI); // 4. Добавить число 555 на начало массива в позицию 0 AI.add(0, 555); System.out.println(AI); > >
Результат выполнения программы
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100] [555, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
2. Метод addAll() . Добавить коллекцию к массиву
Метод addAll() предназначен для добавления уже существующей коллекции в массив. Коллекцией могут быть коллекция, очередь, другой массив и т.д. Метод имеет две перегруженные реализации
addAll(Collectionextends E>) addAll(int index, Collectionextends E>)
- E – тип элементов массива (коллекции);
- index – позиция, с которой происходит вставка.
Пример. Демонстрируется использование метода addAll() для массива целых чисел.
import java.util.*; public class TrainCollections < public static void main(String[] args) < // Метод addAll() - добавить коллекцию к массиву // 1. Создать массив из 5 чисел типа Float ArrayList AI = new ArrayList(); AI.add(1.0f); AI.add(2.0f); AI.add(3.0f); AI.add(4.0f); AI.add(5.0f); System.out.println("AI color: #008000;"> // 2. Создать другой массив из 3 чисел типа Float ArrayList AI2 = new ArrayList(); for (int i=1; iout.println("AI2 color: #008000;"> // 3. Добавить массив AI2 в конец массива AI AI.addAll(AI2); System.out.println("AI + AI2 color: #008000;"> // 4. Записать массив AI2 в массив AI начиная с позиции 2 AI.addAll(2, AI2); System.out.println("AI[2] + AI2 color: #333300;">⇑3. Метод clear(). Очистить массив
Метод clear() предназначен для очищения массива. Согласно документации общая форма объявления метода следующая
public void clear();Пример. В примере создается коллекция из символов-разделителей.
import java.util.*; public class TrainCollections < public static void main(String[] args) < // Метод clear() - очистить коллекцию // 1. Создать коллекцию из разделительных символов в предложении ArrayList AL = new ArrayList(); AL.add(';'); AL.add(':'); AL.add(','); AL.add('.'); AL.add('!'); AL.add('?'); AL.add(' '); // 2. Вывести коллекцию System.out.println("AL => " + AL); // 3. Очистить коллекцию AL.clear(); // 4. Вывести коллекцию после очистки System.out.println("AL.clear() => " + AL); > >Результат выполнения программы
AL => [;, :, ,, ., !, ?, ] AL.clear() => []4. Метод remove() . Удалить элемент в указанной позиции
С помощью метода remove() можно удалить элемент в заданной позиции. Согласно документации, объявление метода следующее
public E remove(int index);
- E – тип элементов массива (коллекции);
- index – номер позиции, которую нужно удалить. Позиция нумеруется с 0.
Метод возвращает значение удаляемого элемента из массива (коллекции).
Если значение index указано за пределами допустимого диапазона
(index < 0 || index >= size())
то будет сгенерировано исключение IndexOutOfBoundsException .
Пример.
import java.util.*; public class TrainCollections < public static void main(String[] args) < // Метод remove() - удалить отдельный элемент из массива // 1. Создать коллекцию вещественных чисел ArrayList AL = new ArrayList(); AL.add(2.8f); AL.add(3.5f); AL.add(7.2f); AL.add(9.4f); AL.add(5.2f); // 2. Вывести коллекцию System.out.print("AL => "); for (int i=0; iout.print(AL.get(i) + " "); System.out.println(); // 3. Удалить элемент в позиции 2, который имеет значение 7.2 AL.remove(2); // 4. Вывести измененную коллекцию System.out.print("AL => "); for (int i=0; iout.print(AL.get(i) + " "); > >
Результат выполнения программы
AL => 2.8 3.5 7.2 9.4 5.2 AL => 2.8 3.5 9.4 5.2
5. Метод removeAll() . Удалить группу элементов из коллекции
С помощью метода removeAll() можно удалить несколько элементов, представленных в виде коллекции. Согласно документации объявление метода следующее:
public boolean removeAll(Collection c);
- c – коллекция (массив) элементов, которые нужно удалить из текущей коллекции.
Метод возвращает true , если текущий массив изменился в результате вызова.
Пример.
В примере формируются две целочисленные коллекции:
- AL – исходная коллекция чисел;
- AL2 – коллекция чисел, которые необходимо удалить из коллекции AL .
С помощью метода removeAll() происходит удаление из коллекции AL всех частей, входящих в коллекцию AL2 .
import java.util.*; public class TrainCollections < public static void main(String[] args) < // Метод removeAll() - удалить группу элементов из массива // 1. Создать коллекцию целых чисел ArrayList AL = new ArrayList(); AL.add(2); AL.add(3); AL.add(2); AL.add(4); AL.add(7); AL.add(3); AL.add(4); AL.add(5); AL.add(6); AL.add(1); // 2. Вывести исходную коллекцию System.out.print("AL => "); for (int i=0; iout.print(AL.get(i) + " "); System.out.println(); // 3. Создать коллекцию чисел, которые нужно удалить ArrayList AL2 = new ArrayList(); // удалить все числа 2, 4, 7 AL2.add(2); AL2.add(4); AL2.add(7); // 4. Вызвать метод removeAll() AL.removeAll(AL2); // 4. Вывести измененную коллекцию System.out.print("AL => "); for (int i=0; iout.print(AL.get(i) + " "); > >
Результат выполнения программы
AL => 2 3 2 4 7 3 4 5 6 1 AL => 3 3 5 6 1
6. Метод removeIf() . Изменить коллекцию на основе предиката
С помощью метода removeIf() можно удалить элементы из коллекции согласно условию. В результате формируется новая коллекция (массив). Общая форма объявления метода следующая
public boolean removeIf(Predicatesuper E> filter);
- filter – ссылка (предикат), определяющее условие фильтрования. Условие задается лямбда-выражением.
Метод возвращает true , если хотя бы один элемент был удалён.
Пример.
В примере демонстрируется выполнение метода removeIf() . Демонстрируются следующие операции:
- создается коллекция целых чисел;
- формируется предикат, в котором определяются числа, которые больше 4;
- вызывается метод removeIf() , с помощью которого формируется новый массив чисел согласно предикату.
import java.util.*; import java.util.function.*; public class TrainCollections < public static void main(String[] args) < // Метод removeIf() - изменить массив по заданному условию // 1. Создать коллекцию целых чисел ArrayList AL = new ArrayList(); AL.add(2); AL.add(3); AL.add(2); AL.add(4); AL.add(7); AL.add(3); AL.add(4); AL.add(5); AL.add(6); AL.add(1); // 2. Вывести исходную коллекцию System.out.print("AL => "); for (int i=0; iout.print(AL.get(i) + " "); System.out.println(); // 3. Объявить ссылку на интерфейс Predicate Predicate ref; // 4. Сформировать условие для ссылки ref на основе лямбда-выражения: // взять все числа, которые больше 4 ref = (value) -> value > 4; // 5. Вызвать метод removeIf() и передать ему ссылку ref условием AL.removeIf(ref); // удалить все числа, которые больше 4 // 6. Вывести измененный массив AL System.out.print("AL => "); for (int i=0; iout.print(AL.get(i) + " "); System.out.println(); > >
Результат выполнения программы
AL => 2 3 2 4 7 3 4 5 6 1 AL => 2 3 2 4 3 4 1
7. Метод replaceAll() . Произвести вычисления над каждым элементом массива
С помощью метода replaceAll() можно применить некоторую операцию к каждому элементу массива. Такой операцией может быть, например произведение каждого элемента на 2. Согласно документации, общая форма объявления метода следующая:
public void replaceAll(UnaryOperator operator);
- operator – лямбда-выражение, определяющее операцию над каждым элементом последовательности. Лямбда-выражение формируется с помощью функционального интерфейса UnaryOperator .
Пример. В примере создается массив целых чисел. Затем каждый элемент массива умножается на 3 с помощью метода replaceAll() . Для выполнения вычисления формируется ссылка на подходящее лямбда-выражение.
import java.util.*; import java.util.function.*; public class TrainCollections < public static void main(String[] args) < // Метод replaceAll() - изменить значение элементов исходного массива // 1. Создать коллекцию целых чисел ArrayList AL = new ArrayList(); AL.add(2); AL.add(3); AL.add(2); AL.add(4); AL.add(7); AL.add(3); // 2. Вывести коллекцию с помощью итератора Iterator it = AL.iterator(); System.out.print("AL => "); while (it.hasNext()) System.out.print(it.next()+" "); System.out.println(); // 3. Сформировать лямбда-выражение, которое умножает элемент на 3 UnaryOperator op = (num) -> num*3; // 4. Вызвать метод replaceAll() и применить к нему оператор op AL.replaceAll(op); // 5. Вывести измененную коллекцию (массив) целых чисел it = AL.iterator(); System.out.print("AL => "); while (it.hasNext()) < System.out.print(it.next() + " "); > > >
Результат выполнения программы
AL => 2 3 2 4 7 3 AL => 6 9 6 12 21 9
8. Метод set() . Установить новое значение в элементе
Метод set() устанавливает новое значение в заданной позиции массива. Другими словами, старое значение массива в заданной позиции заменяется новым. Объявление метода имеет вид
public E set(int index, E element);
- index – позиция вставки (нумеруется с 0);
- element – новое значение, которое необходимо установить в позиции index .
Метод возвращает предыдущее значение, установленное в заданной позиции.
Если значение index выходит за пределы допустимого диапазона, т.е.
(index < 0 || index >= size())
то будет сгенерировано исключение IndexOutOfBoundsException .
Приклад.
import java.util.*; import java.util.function.*; public class TrainCollections < public static void main(String[] args) < // Метод set() - установить значение в отдельном элементе массива // 1. Создать коллекцию строк ArrayList AL = new ArrayList(); AL.add("a"); AL.add("b"); AL.add("c"); // 2. Вывести исходный массив с помощью итератора Iterator it = AL.iterator(); System.out.print("AL => "); while (it.hasNext()) System.out.print(it.next()+" "); System.out.println(); // 3. Установить новое значение в элементе с индексом 1 String oldValue; oldValue = AL.set(1, "bbb"); // 4. Вывести предыдущую строку System.out.println("oldValue color: #008000;"> // 5. Вывести измененный массив System.out.print("AL => "); for (int i=0; iout.print(AL.get(i) + " "); System.out.println(); > >
Результат выполнения программы
AL => a b c oldValue = b AL => a bbb c
9. Метод sort() . Отсортировать элементы массива
С помощью метода sort() можно сортировать элементы массива. Общая форма объявления метода следующая
public void sort(Comparatorsuper E> c);
- c – компаратор (условие), реализующий принцип сравнения каких-либо двух элементов массива. Компаратор используется в случае разработки собственного класса, объекты которого могут быть отсортированы по некоторому критерию. В этом случае класс должен реализовать интерфейс Comparator . В этом интерфейсе определен метод compare() , сравнивающий два элемента. Конкретно этот способ нужно переопределить и воплотить в этом классе и задать свой механизм сравнения.
Для стандартных типов-оболочек ( Integer , Double , String и т.д.) реализован внутренний компаратор, сортирующий элементы в естественном порядке (от меньшего к большему или по алфавиту).
Для использования стандартного способа сортировки следует вызвать метод sort() с аргументом null
AL.sort(null);
здесь AL – массив сортируемых элементов.
Пример.
import java.util.*; import java.util.function.*; public class TrainCollections < public static void main(String[] args) < // Метод sort() - сортировка в естественном порядке // 1. Создать массив строк ArrayList AL = new ArrayList(); AL.add("jklm"); AL.add("abcd"); AL.add("elsd"); AL.add("lkls"); AL.add("azsd"); // 2. Вывести исходный массив Iterator it = AL.iterator(); System.out.print("AL => "); while (it.hasNext()) System.out.print(it.next()+" "); System.out.println(); // 3. Отсортировать элементы массива, метод sort() AL.sort(null); // 4. Вывести отсортированный массив System.out.print("AL => "); for (int i=0; iout.print(AL.get(i) + " "); System.out.println(); > >
Результат выполнения программы
AL => jklm abcd elsd lkls azsd AL => abcd azsd elsd jklm lkls
Связанные темы
- Класс ArrayList . Динамический массив. Общие сведения. Создание массива
- Методы, определяющие информацию об элементах массива. Методы get() , contains() , containsAll() , indexOf() , lastIndexOf() , iterator() , listIterator()
- Методы определяющие общие характеристики массива. Методы ensureCapacity() , isEmpty() , size() , trimToSize()
- Методы преобразующие массив в целом. Методы clone() , sublist() , toArray() , retainAll()
Самый простой способ добавить элемент в начало и удалить в конце в Java
Привет! Подскажите, как Java создать динамический массив (карту) и обработать его, такого вида: Создаем: [20,30,40,50,60] Добавляем элемент в начало и убираем в конце: [10,20,30,40,50] Т.е. мне необходимо оставить тело 20,30,40,50, не трогать, а к нему добавить голову 10, и убрать хвост 60. Как реализовать это самым быстрым и дешевым методом это в Java?
Отслеживать
задан 24 мар 2015 в 6:44
53 2 2 серебряных знака 5 5 бронзовых знаков
предположу, что linked list
24 мар 2015 в 6:48
Здравствуйте, насколько дорого использовать это?
24 мар 2015 в 7:16
>что значит дорого ? производительность ? пиши нормальные, конкретные вопросы. ну что вы придираетесь-то? Разве тут могут быть какие-то другие подходящие значения для слова "дорого"?
24 мар 2015 в 7:32
Дорого для Java, это значит память, и процессорный ресурс менее всего. С помощью чего, Java не будет двигать весь массив, а просто добавит элемент в начало (насколько я понимаю, первый элемент станет ссылаться на новый, а последнему присвоим значение null, "классический" список в Си)
24 мар 2015 в 7:39
4 ответа 4
Сортировка: Сброс на вариант по умолчанию
Подскажите, как Java создать динамический массив (карту)
Вы, наверное, имеете в виду map (обычно ее начинающие ошибочно называют картой)? Слово "map" имеет несколько переводов, в зависимости от контекста употребления, и здесь верный перевод - это "отображение" (этот термин пришел из дискретной математики). Отображение в Java можно создать на базе дерева или hash таблицы, не думаю, что что-то из этого вам подойдет.
Как реализовать это самым быстрым и дешевым методом это в Java?
Вам нужен двусвязный список:
Deque deque = new LinkedList(); deque.addAll(Arrays.asList(20, 30, 40, 50, 60)); deque.addFirst(10); // O(1) deque.removeLast(); // O(1)
Подскажите, пожалуйста, в данном случае на организацию списка, вставку и удаление будет затрачено меньше памяти и процессорного времени чем для "сдвига" всего массива
Есть эмпирическое правило выбора структуры данных в вашем случае:
- Массив хорош для быстрого доступа на чтение к любому его элементу, вставки элементов в конец, удаления элементов с конца. Все эти действия выполняются очень быстро. Вставка (либо удаление) в начало или вставка (либо удаление) в середину приводят наихудшему времени (т.к. приходится выделять новый кусок памяти и копировать туда измененный массив).
- Двусвязный список хорош для быстрой вставки (либо удаления) элементов в конце и в начале. Вставка (либо удаление) элементов в середину требует больше времени, но выполняется все-равно быстрее, чем в массиве (т.к. не требует копирования абсолютно всей структуру данных, как это необходимо для массива). Произвольный доступ к элементам (кроме, первого и последнего) в списке требует больше затрат времени, чем в массиве.
Добавить К элементов в конец массива
Как добавить элементы в конец массива!? Почитал в интернете, и полазив по другим форумам получил инфу что массив в Java нельзя менять!?
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Добавить К элементов в конец массива
Добрый день! В техникуме изучаем С++ и у меня задание с массивом: 1)Сформировать массив .
Удалить пять первых нечетных элементов массива. Добавить в конец массива три новых нулевых элемента
Удалить пять первых нечетных элементов массива. Добавить в конец массива три новых нулевых.
Добавить n элементов из массива xs в конец массива array
void appendElements (Array, *array, int *xs, int n); Добавляет n элементов из массива xs в конец.
Добавить в конец массива 10 элементов случайных чисел
Задан массив из случайных целых чисел. Если произведение элементов массива, кратных 7, больше.
614 / 488 / 175
Регистрация: 02.03.2010
Сообщений: 1,238
Когда происходит:
arr = new int [n];
Выделяется область памяти для массива, которая имеет точные границы и соответственно размер, поэтому под
Сообщение от allonemoon 
получил инфу что массив в Java нельзя менять!?
понимается, что нельзя увеличить или уменьшить его размер, но никак не то, что нельзя менять значения в ячейках массива.
Если, после того, как ваш массив сформировался, вам нужно добавить элементы в него (в конец), то необходимо создать новый массив, с бОльшим размером, а именно с размером n+m, где m - кол-во элементов которые нужно добавить в конец.
64 / 64 / 26
Регистрация: 07.01.2016
Сообщений: 374
а лучше создай ArrayList
Регистрация: 31.10.2015
Сообщений: 261
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
int[] destArr = new int[5]; Scanner in = new Scanner(System.in); System.out.println("Добавить размер массиву: "); a = in.nextInt(); add_mas = new int [a]; for (int i=0;iadd_mas.length;i++) add_mas[i] = (int) ( Math.random() * a); for (int i: add_mas) // System.out.print( i + " " ); System.arraycopy(sourceArr, arr.length, destArr, 0, arr.length); for (int i=0; i destArr.length; i++) { System.out.print(destArr[i] + " "); }
Что не правильно!? Подскажите плиз!?
Ошибка Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException
![]()
3638 / 2970 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
destArr = new int[5]
Регистрация: 31.10.2015
Сообщений: 261
Всё равно ошибка идёт!?
![]()
![]()
4467 / 2701 / 484
Регистрация: 28.04.2012
Сообщений: 8,559
Сообщение от allonemoon 
Всё равно ошибка идёт!?
Это ты у нас спрашиваешь?
Что за sourceArr? Что за arr? Приведи компилируемый код.
Регистрация: 25.12.2011
Сообщений: 111
Попробуй так, должно выйти.
P.S Пишу с телефона, код корявый.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
int[] destArr = new int[5]; Scanner in = new Scanner(System.in); for (int i=0;idestArr.length;i++) destArr[i] = (int) ( Math.random() * 2); System.out.println("Добавить размер массиву: "); int a = in.nextInt(); int[] finalArr = new int[destArr.length + a]; for (int i=0;ifinalArr.length;i++){ if(idestArr.length){ finalArr[i] = destArr[i]; } else{ finalArr[i] = (int) ( Math.random() * a); } } for(int t:finalArr) System.out.println(n+" ");
Регистрация: 31.10.2015
Сообщений: 261
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 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package cplab3mas; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; import java.util.List; import java.util.Random; import java.util.Scanner; /** * * @author Артем */ public class CpLab3Mas { public static int i,n,s,arr[]; /** * @param args the command line arguments */ public static void main(String[] args) throws Exception { Scanner in = new Scanner(System.in); System.out.println("Введите размер массива: "); n = in.nextInt(); arr = new int [n]; for (int i=0;iarr.length;i++) arr[i] = (int) ( Math.random() * n); for (int i: arr) System.out.printf( i + " " ); System.out.println("1: Удалить все элементы больше среднеарифмитического " + "элементов массива"); System.out.println("2: К элементов в конец массива"); System.out.println("3: Поменять местами элементы с чётными и нечётными " + "номерами"); System.out.println("4: Первый отрицательный"); System.out.println("5: Простое включение"); Scanner s = new Scanner(System.in);{ System.out.println("Выберите действие с массивом"); int i = s.nextInt(); switch (i) { case 1: DeleterSrArifmet(); break; case 2: AddKonec(); break; case 3: ZamenaMas(); break; case 4: OneOtric(); break; case 5: student(); break; } } } public static void OneOtric(){ // Создаем два массива int[] a1 = new int[10]; int[] a2 = new int[10]; // заполняем их девятками Arrays.fill(a1, 9); Arrays.fill(a2, 9); System.out.print("Сравним: " + Arrays.equals(a1, a2)); } public static void ZamenaMas(){ } public static void AddKonec(){ int[] destArr = new int[5]; Scanner in = new Scanner(System.in); for (int i=0;idestArr.length;i++) destArr[i] = (int) ( Math.random() * 2); System.out.println("Добавить размер массиву: "); int a = in.nextInt(); int[] finalArr = new int[destArr.length + a]; for (int i=0;ifinalArr.length;i++){ if(idestArr.length){ finalArr[i] = destArr[i]; } else{ finalArr[i] = (int) ( Math.random() * a); } } for(int t:finalArr) System.out.println(n+" "); } public static void DeleterSrArifmet(){ double average = 0; if (arr.length > 0) { double sum = 0; for (int j = 0; j arr.length; j++) { sum += arr[j]; } average = sum / arr.length; System.out.println("Среднее арифмитическое:"); System.out.println(average); double avg = Arrays.stream(arr).average().getAsDouble(); int[] ints = Arrays.stream(arr).filter(i -> i avg).toArray(); System.out.println(Arrays.toString(ints)); } } private static void student() throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools }
Добавлено через 38 минут
Блин уже мозги все сплавил. Пытаюсь добиться результата но не получается никак. Подскажите ПЛИЗ! Есть массив размер которого вводится пользователем в процессе выполнения программы
public static int i,n,arr[];
При выборе второго действия, пользователь увеличивает значение массива из программы(тоже генерируется массив случайным числом). Нужно вывести данные из первого массива и второго массива - вместе. Как быть!? То есть у меня должно быть три массива или как?
Добавлено через 1 час 24 минуты
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
int index=10; int element; if (index>arr[i] || index0){System.out.print("Массив");} int[] temp = new int[arr.length + 1]; for (int i=0; iarr.length; i++){ if (iindex) { temp[i+1]=arr[i]; } } // temp[0]=element; arr = temp; for (int i: arr) System.out.print(" "+i);
