I wouldn't use a capability for this. I would just save this to a file yourself. For simplicity sake probably a json file like the ops file.
But if you really wanted to use a Capability here you would probably attach it to the Player and not use an ArrayList at all.
No you don't need an interface. You only need to use an interface if your capability is modifiable. IE can have different implementations.
Yes all Capabilities need an IStorage component.
You would use NBTTagList.