为什么Java集合中的某些方法使用通用类型作为参数,而另一些使用Object类型呢?

ArrayList API:

public boolean remove(Object o)
public void add(E e)

为什么方法remove不采用E类型的对象而不是Object?它后面是否有某些特定的逻辑,或者以“仅因为”和remove可以将E作为参数正确地工作而完成此操作?