package net.minecraft.src; import java.util.ArrayList; public class CompactArrayList { private ArrayList list; private int initialCapacity; private float loadFactor; private int countValid; public CompactArrayList() { this(10, 0.75F); } public CompactArrayList(int initialCapacity) { this(initialCapacity, 0.75F); } public CompactArrayList(int initialCapacity, float loadFactor) { this.list = null; this.initialCapacity = 0; this.loadFactor = 1.0F; this.countValid = 0; this.list = new ArrayList(initialCapacity); this.initialCapacity = initialCapacity; this.loadFactor = loadFactor; } public void add(int index, Object element) { if (element != null) { ++this.countValid; } this.list.add(index, element); } public boolean add(Object element) { if (element != null) { ++this.countValid; } return this.list.add(element); } public Object set(int index, Object element) { Object oldElement = this.list.set(index, element); if (element != oldElement) { if (oldElement == null) { ++this.countValid; } if (element == null) { --this.countValid; } } return oldElement; } public Object remove(int index) { Object oldElement = this.list.remove(index); if (oldElement != null) { --this.countValid; } return oldElement; } public void clear() { this.list.clear(); this.countValid = 0; } public void compact() { if (this.countValid <= 0 && this.list.size() <= 0) { this.clear(); } else if (this.list.size() > this.initialCapacity) { float currentLoadFactor = (float)this.countValid * 1.0F / (float)this.list.size(); if (currentLoadFactor <= this.loadFactor) { int dstIndex = 0; int i; for (i = 0; i < this.list.size(); ++i) { Object wr = this.list.get(i); if (wr != null) { if (i != dstIndex) { this.list.set(dstIndex, wr); } ++dstIndex; } } for (i = this.list.size() - 1; i >= dstIndex; --i) { this.list.remove(i); } } } } public boolean contains(Object elem) { return this.list.contains(elem); } public Object get(int index) { return this.list.get(index); } public boolean isEmpty() { return this.list.isEmpty(); } public int size() { return this.list.size(); } public int getCountValid() { return this.countValid; } }