Если оно достигает этого максимального значения, я хочу удалить самый старый объект (индекс 0)
Тогда сделай wordHist.remove(0)
. Это удалит элемент с индексом 0.
Чтобы быть точным:
wordHist.add(new Word("hello"));
if (wordHist.size() > MAX_SIZE)
wordHist.remove(0);
Однако, как заявляет пользователь 658991, вы должны знать, что это линейная операция, т. Е. Требует времени, пропорционального количеству элементов в списке.
Вы можете сделать это в постоянное время, используя LinkedList
методы add
и removeFirst
.
Другой вариант - обернуть массив или ArrayList в классе, который называется что-то вроде CircularArrayList
. В структурах циклического списка вы переопределяете самый старый элемент при добавлении нового.
Edit:
Ваш код работает нормально:
import java.util.*;
class Test {
static int WORDHIST_MAX_COUNT = 3;
static List<String> wordHist = new ArrayList<String>();
public static void add(String currentWord) {
// VERBATIM COPY OF YOUR CODE
if (true/*event.getAction() == MotionEvent.ACTION_UP*/)
{
if(currentWord != null)
{
wordHist.add(currentWord);
}
if(wordHist.size() > WORDHIST_MAX_COUNT)
{
wordHist.remove(0);
}
}
}
public static void main(String[] args) {
add("a");
add("b");
add("c");
for (int i = 0; i < wordHist.size(); i++)
System.out.printf("i: %d, word: %s%n", i, wordHist.get(i));
System.out.println();
add("d");
for (int i = 0; i < wordHist.size(); i++)
System.out.printf("i: %d, word: %s%n", i, wordHist.get(i));
}
}
Печать:
i: 0, word: a
i: 1, word: b
i: 2, word: c
i: 0, word: b <-- b is now at index 0.
i: 1, word: c
i: 2, word: d