Исправлен размер массива Java

#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] получаете. Теперь просто «добавьте то, что вы хотите в конце» или возьмите элемент at arr[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