Pool.java 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package holeg.utility.pooling;
  2. import holeg.ui.view.inspector.InspectorTable;
  3. import java.util.ArrayList;
  4. import java.util.stream.Stream;
  5. public abstract class Pool<T> {
  6. int borrowedCount = 0;
  7. private int poolCapacity = 1000;
  8. private final ArrayList<T> poolList = new ArrayList<>(poolCapacity);
  9. private final ArrayList<T> borrowedList = new ArrayList<>(poolCapacity);
  10. public abstract T create();
  11. public Pool(){
  12. poppulatePool(poolCapacity);
  13. }
  14. public T get(){
  15. checkCapacity(borrowedCount);
  16. T poolObject = poolList.get(borrowedCount);
  17. borrowedCount++;
  18. borrowedList.add(poolObject);
  19. return poolObject;
  20. }
  21. public void clear() {
  22. borrowedList.clear();
  23. borrowedCount = 0;
  24. }
  25. private void poppulatePool(int amount) {
  26. for(int i= 0; i < amount; i++) {
  27. poolList.add(create());
  28. }
  29. }
  30. private void checkCapacity(int requestedCapacity) {
  31. if(poolCapacity <= requestedCapacity) {
  32. int newSize = 2 * requestedCapacity;
  33. poppulatePool(newSize - poolCapacity);
  34. poolCapacity = 2*requestedCapacity;
  35. }
  36. }
  37. public int getBorrowedCount() {
  38. return borrowedCount;
  39. }
  40. public Stream<T> getBorrowedStream(){
  41. return borrowedList.stream();
  42. }
  43. }