INSERT
LinkedList
Insert first - O(1)
Insert last - O(1)
Insert anywhere - O(n) - it's because need to find by index where to insert.
ArrayList
Insert first - O(n)
Insert last - O(1)
Insert anywhere - O(n)
So LinkedList
and ArrayList
have the same O(n) insert anywhere.
DELETE
LinkedList
Delete first - O(1)
Delete last - O(1)
Delete anywhere - O(n) - And again it's because need to find by index where to delete.
ArrayList
Delete first - O(n)
Delete last - O(1)
Delete anywhere - O(n)
So LinkedList
and ArrayList
have the same O(n) delete anywhere.
As you can see insert and delete anywhere for both is the same.
If you always do insert last operation then ArrayList is suitable to use because if you know the index then lookup is O(1) and O(n) for LinkedList. I think you need to find the golden middle what is more suitable to use.
Also if you dont care about dublicate-free you can use HashSet. It's based on hash table and provides suitable performence (O(1), O(log(n) for many cases) for insert and delete, lookup.
HashSet jdoc
This class offers constant time performance for the basic operations (add, remove, contains and size), assuming the hash function disperses the elements >properly among the buckets.