package mekanism.common; import java.util.ArrayList; import java.util.Iterator; public class HashList<T> implements Iterable<T> { private ArrayList<T> list = new ArrayList<T>(256); private HashList(ArrayList<T> newList) { list = newList; } public HashList() {} public boolean contains(T obj) { return list.contains(obj); } public void clear() { list.clear(); } public T get(int index) { if(index > size()-1) { return null; } return list.get(index); } public void add(T obj) { if(!list.contains(obj)) { list.add(obj); } } public void add(int index, T obj) { if(!list.contains(obj)) { if(index > size()) { for(int i = size(); i <= index-1; i++) { list.add(i, null); } } list.add(index, obj); } } public boolean isEmpty() { return list.isEmpty(); } public void remove(int index) { if(isEmpty() || index > size()-1) { return; } list.remove(index); } public void replace(int index, T obj) { if(get(index) != null) { remove(index); } add(index, obj); } public void remove(T obj) { list.remove(obj); } public int indexOf(T obj) { return list.indexOf(obj); } public int size() { return list.size(); } @Override public HashList<T> clone() { return new HashList((ArrayList)list.clone()); } public void swap(int source, int target) { // Make sure both source and target are legal values if(source == target) return; if(source < 0 || target < 0) return; if(source >= list.size() || target >= list.size()) return; // Perform swap T temp = list.get(source); list.set(source, list.get( target)); list.set(target, temp); } @Override public int hashCode() { return list.hashCode(); } @Override public boolean equals(Object obj) { return list.equals(obj); } @Override public Iterator<T> iterator() { return list.iterator(); } }