#java #arrays #arraylist
#java #массивы #Список массивов
Вопрос:
в Java
я хочу создать array
объект с фиксированным размером, чтобы я мог добавлять новые элементы, а первый элемент выпадал.
Например:
array
С размером 5
: {1,2,3,4,5}
затем я добавляю « 6
» и « 1
» выпадает, так что у меня есть {2,3,4,5,6}
, я добавляю « 7
» и « 2
» выпадает: {3,4,5,6,7}
…
Итак, я хочу добавить новый элемент и удалить первый элемент. Есть ли простой способ сделать это или я должен реализовать его сам?
Могу ли я сделать это с ArrayList
помощью и просто удалить первый Object
? Если я удалю первый Object
из an ArrayList
, будет ли второй объект автоматически становиться первым объектом?
Спасибо
Комментарии:
1. Ключевое слово для этого — «круговой массив», я уверен, что вы можете найти реализацию Java.
2. Не уверен в вопросе с массивом, но для arraylist да, если вы удалите элемент с 0-м индексом в списке массива, элемент с 1-м индексом перейдет к 0-му индексу.
3. «или я должен реализовать это сам» Конечно, вы это делаете. В массивах нет «добавления», только «замена». Вы заменяете элемент в определенном индексе другим.
4. Вместо того чтобы спрашивать «могу ли я сделать это с
ArrayList
помощью «, просто попробуйте сами. Совершенно глупо спрашивать что-то подобное здесь.5. Остерегайтесь понижающих голосов, ребята, по крайней мере, объясните, почему вы понижаете . Это крайне грубое поведение. Я не думаю, что этот вопрос настолько плох. Я, конечно, не придумал бы в
EvictingQueue
качестве ответа только один поиск в Google.
Ответ №1:
Предполагая, что вам не обязательно нужен a List
, вы можете использовать an EvictingQueue
из Google Guava, который представляет собой неблокирующую очередь, которая автоматически удаляет элементы из заголовка очереди при попытке добавить новые элементы в очередь, и она заполнена.
// Create an EvictingQueue with a max size of 5
Collection<Integer> collection = EvictingQueue.create(5);
// Add 5 elements to the queue
collection.addAll(Arrays.asList(1, 2, 3, 4, 5));
System.out.println(collection);
// Add one more element
collection.add(6);
System.out.println(collection);
Вывод:
[1, 2, 3, 4, 5]
[2, 3, 4, 5, 6]
Комментарии:
1. Я бы не стал полностью возвращаться к коллекции при создании
EvictingQueue
. Вместо этого я бы использовал хотя быQueue
благоговение.2. @MaartenBodewes Я хотел больше показать, как это работает, тот факт, что это a
Queue
, на самом деле не имеет значения в данном контексте, но я согласен с вами, теперь это зависит от OP.3. @MaartenBodewes да, я знаю, я уже сделал, чем больше я провожу времени на этом сайте, тем меньше я понимаю отрицательные отзывы
Ответ №2:
просто установите для i-го элемента значение i-го 1 элемент и добавьте то, что вы хотите в конце:
static int[] g(int arr[],int n){
for(int i=0;i<arr.length-1;i ){
arr[i]=arr[i 1];
}
arr[arr.length-1] = n;
return arr;
}
public static void main(String [] args) {
int[] arr = {1,2,3,4,5};
System.out.println(Arrays.toString(g(arr,6)));
}
вывод:
[2, 3, 4, 5, 6]
Комментарии:
1. Пожалуйста, постарайтесь придерживаться правил кодирования Java. Это примеры, которые должны быть легко читаемыми. Объясните, что вы делаете со встроенными комментариями, и назовите свои переменные. Первое, что я подумал, когда увидел это, было g (ee), что это?
2. Объяснять особо нечего, то, о чем вы просите, — это объяснить, что a
for loop
делает в java. Но если это поможет … возьмите, например0th
, элемент (arr[0]
) и установите его равнымith 1
элементу (arr[0 1] = arr[1]
), чтобыarr
он выглядел так[2,2,3,4,5]
. Продолжая выполнять описанную выше процедуру,i < arr.length - 1
вы[2, 3, 4, 5, 5]
получаете. Теперь просто «добавьте то, что вы хотите в конце» или возьмите элемент atarr[arr.length - 1]
и установите его равным «тому, что вы хотите» (в моем примере у меня есть6
), такarr[arr.length - 1] = 6
илиarr[4] = 6
.
Ответ №3:
Возможно, вам придется сделать что-то вроде:
public class Num {
int[] array = {1,2,3,4,5};
public void add(int number){
int[] temp = array;
array = new int[array.length];
for(int i=1;i<temp.length;i ){
array[i-1] = temp[i];
}
array[array.length-1] = number;
for(int i=0;i<array.length;i ){
System.out.print(array[i] " ");
}
System.out.println();
}
public static void main(String[] args) {
Num num = new Num();
num.add(6);
num.add(7);
num.add(8);
}
}
и вывод будет выглядеть следующим образом:
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8