列表删除方法是原始的

时间:2012-09-12 07:04:13

标签: java collections

问题说明了一切......

从List的代码:

添加方法: public boolean add(E e) { ... }

然而,删除方法: public boolean remove(Object o) { .. }

这有什么具体原因吗?

1 个答案:

答案 0 :(得分:7)

来自the javadoc

  

如果此列表不包含该元素,则不会更改

因此,在此处添加类型约束将毫无用处,而add上的约束确保在编译时列表包含在框中写入的内容。

请注意,实现有一些自由,因为允许该方法抛出

  

如果指定元素的类型是ClassCastException   与此列表不兼容(可选)

ArrayList实现不会抛出此异常:

439    public boolean remove(Object o) {
440         if (o == null) {
441             for (int index = 0; index < size; index++)
442                 if (elementData[index] == null) {
443                     fastRemove(index);
444                     return true;
445                 }
446         } else {
447             for (int index = 0; index < size; index++)
448                 if (o.equals(elementData[index])) {
449                     fastRemove(index);
450                     return true;
451                 }
452         }
453         return false;
454     }

这意味着您不必在执行删除操作之前检查原始对象的类。