【发布时间】:2013-09-28 07:14:42
【问题描述】:
我想在 java 中创建一个列表,在添加新元素时,将检查是否达到限制。如果是,请删除最旧的元素。
我正在考虑创建 ArrayList 的子级并覆盖 add(Object)。在那里我会这样做:
if(size() + 1 > MAX)
remove(get(0));
super.add(newObject);
有更好的方法吗?
【问题讨论】:
-
这不是一个好主意。删除
ArrayList的第一个元素会导致所有其他元素移动(这需要O(n)时间)。您应该改用圆形数组。 -
除了 jazzbassrob 的回答之外,article 可能会引起您的兴趣。另见SO question
-
像其他人建议的那样,使用循环数组。但作为一般规则,我更喜欢组合而不是继承,它允许使用装饰器模式。因此,如果我想使用列表,我宁愿为列表创建一个装饰器类,它强制执行最大大小(从而允许装饰器的用户在 ArrayList 和 LinkedList 甚至其他列表之间进行选择),而不是创建 ArrayList 的子类或链表。