Create a ProductList class that has an ArrayList field and a integer set to keep track of ID's that have been added. When you add an item, check if the set already contains the item's ID. If it doesn't, add the item to the ArrayList. So this basically wraps around an ArrayList quite nicely. Here's how I would do it:
public class ProductList{
...
private ArrayList<Product> list = new ArrayList<Product>();
private Set<Integer> ids = new Set<Integer>();
...
public void addProduct(Product product){
if(!ids.contains(product.getID())){
list.add(product);
ids.add(product.getID());
}
}
public Product removeProduct(Product product){
if(!list.contains(product)) return null;
ids.remove(product.getID());
return list.remove(product);
}
...
}
You can then just use
ProductList stock = new ProductList();
and stock.addProduct(Product item); in your other class.
If you think you'll be using your list quite extensively, creating practical constructors to integrate with your data fields will be very useful as well.
This is a very good approach from an abstraction point of view, however it's probably not the most efficient way of doing it.