They're not really optional.
You have to provide some sort of implementation, but it's common to provide an implementation that just throws an exception:
public void remove() {
throw new UnsupportedOperationException();
}
In some situations it might also be reasonable to provide a "do-nothing" implementation:
public void remove() {
// Can't remove...
}
If you do either of these, it's a good idea to document that you've done it.
If you make this an abstract class, then you don't have to implement the methods in this specific class. But at some point down the class hierarchy, you have to implement a concrete class with all the methods. Nothing actually happens until you instantiate your class in an instance, and you can't do that with an abstract class.