package partition; import map.HashTableMap; import position.NodePositionList; import position.PositionList; import set.OrderedListSet; import set.Set; import utility.DefaultComparator; import exceptions.InvalidKeyException; import java.util.Iterator; /** * Created with xgiovio.macbookair. * User: xgiovio * Date: 19/05/14 * Time: 15:02 */ public class ListPartition implements Partition { private HashTableMap> elementi; private PositionList> partizione; public ListPartition () { elementi = new HashTableMap>(); partizione = new NodePositionList>(); } @Override public int size() { return elementi.size(); } @Override public boolean isEmpty() { return (size() == 0 ); } @Override public Set makeSet(E x) { OrderedListSet o = new OrderedListSet(x, new DefaultComparator()); elementi.put(x, o); partizione.addLast(o); o.setLocation(partizione.last()); return o; } @Override public Set union(Set A, Set B) { if (A.size() > B.size()){ OrderedListSet AA = (OrderedListSet) A; OrderedListSet BB = (OrderedListSet) B; AA.fastUnion(BB); partizione.remove(BB.location()); BB.setLocation(null); Iterator it = BB.list().iterator(); for (;it.hasNext();) elementi.put(it.next(),AA); return AA; } else { OrderedListSet AA = (OrderedListSet) B; OrderedListSet BB = (OrderedListSet) A; AA.fastUnion(BB); partizione.remove(BB.location()); BB.setLocation(null); Iterator it = BB.list().iterator(); for (;it.hasNext();) elementi.put(it.next(),AA); return AA; } } @Override public Set find(E x) { return elementi.get(x); } @Override public String toString() { return partizione.toString(); } }