001    /**
002     * Created by IntelliJ IDEA.
003     * User: Wei Wang
004     * Date: Jan 9, 2003
005     * Time: 10:16:34 PM
006     */
007    
008    package EVolve.util.Equators;
009    
010    import java.util.ArrayList;
011    
012    public class SpecialUnorderedSet extends Set{
013    
014        public SpecialUnorderedSet(int interval, int entityNumber) {
015            size = interval;
016            data = new int[entityNumber];
017            emptySlot = 0;
018            this.entityNumber = entityNumber;
019            for (int i=0; i<data.length; i++)
020                data[i] = 0;
021        }
022    
023        public boolean exist(int element) {
024            if (element >= data.length) return false;
025    
026            return data[element] != 0;
027        }
028    
029        public Set newSet() {
030            return new SpecialUnorderedSet(size,entityNumber);
031        }
032    
033        public void addElement(int element) {
034            if ((element >= data.length)||(emptySlot>=size)) {
035                System.out.println("Set is full, unable to add new elements!!!");
036                return;
037            }
038    
039            data[element]++;
040            emptySlot++;
041        }
042    
043        public Set union(Set set) {
044            ArrayList temp= new ArrayList();
045    
046            for (int i=0; i<data.length; i++) {
047                if ((data[i]!=0)||(set.getElement(i)!=0))
048                    temp.add(new Integer(i));
049            }
050    
051            Set result = new SpecialUnorderedSet(size,entityNumber);
052            for (int i=0; i<temp.size(); i++) {
053                result.addElement(((Integer)temp.get(i)).intValue());
054            }
055    
056            return result;
057        }
058    
059        public Set intersection(Set set) {
060            ArrayList temp= new ArrayList();
061    
062            for (int i=0; i<data.length; i++) {
063                if ((data[i]!=0)&&(set.getElement(i)!=0))
064                    temp.add(new Integer(i));
065            }
066    
067            Set result = new SpecialUnorderedSet(size,entityNumber);
068            for (int i=0; i<temp.size(); i++) {
069                result.addElement(((Integer)temp.get(i)).intValue());
070            }
071    
072            return result;
073        }
074    
075        public boolean equals(Set set, float percent) {
076            float counter = 0;
077            for (int i=0; i<data.length; i++) {
078                if ((data[i]!=0) && (set.getElement(i)!=0))
079                    counter = counter + data[i] + set.getElement(i);
080            }
081    
082            return ((100*counter/(2*size)) >= percent);
083        }
084    
085        public int getHashValue() {
086            int result = 0;
087            for (int i=0; i<data.length; i++) {
088                if (data[i] != 0)
089                    result = result ^ data[i];
090            }
091    
092            return result;
093        }
094    
095        public int getValidSize() {
096            return entityNumber;
097        }
098    
099        public int getEntityId(int i) {
100            if (data[i]==0)
101                return -1;
102            return i;
103        }
104    }