package holeg.utility.pooling; import holeg.ui.view.inspector.InspectorTable; import java.util.ArrayList; import java.util.stream.Stream; public abstract class Pool { int borrowedCount = 0; private int poolCapacity = 1000; private final ArrayList poolList = new ArrayList<>(poolCapacity); private final ArrayList borrowedList = new ArrayList<>(poolCapacity); public abstract T create(); public Pool(){ poppulatePool(poolCapacity); } public T get(){ checkCapacity(borrowedCount); T poolObject = poolList.get(borrowedCount); borrowedCount++; borrowedList.add(poolObject); return poolObject; } public void clear() { borrowedList.clear(); borrowedCount = 0; } private void poppulatePool(int amount) { for(int i= 0; i < amount; i++) { poolList.add(create()); } } private void checkCapacity(int requestedCapacity) { if(poolCapacity <= requestedCapacity) { int newSize = 2 * requestedCapacity; poppulatePool(newSize - poolCapacity); poolCapacity = 2*requestedCapacity; } } public int getBorrowedCount() { return borrowedCount; } public Stream getBorrowedStream(){ return borrowedList.stream(); } }