001    /**
002     * Created by IntelliJ IDEA.
003     * User: Wei Wang
004     * Date: Apr 1, 2003
005     * Time: 8:03:20 PM
006     */
007    
008    package EVolve.util.equators;
009    
010    import java.util.HashMap;
011    import java.util.Iterator;
012    
013    import EVolve.util.HelperFuncs;
014    
015    public class UnorderedUnlimitedSet extends Set{
016        private HashMap data;
017    
018        public UnorderedUnlimitedSet() {
019            data = new HashMap();
020        }
021    
022        public int size() {
023            return data.size();
024        }
025    
026        public long getElement(int i) {
027            return ((Long)data.get(new Integer(i))).longValue();
028        }
029    
030        public boolean setFull() {
031            return false;
032        }
033    
034        public long getEntityId(int i) {
035            return getElement(i);
036        }
037    
038        public void addElement(long id) {
039            if (!data.containsValue(new Long(id)))
040                data.put(new Integer(data.size()),new Long(id));
041        }
042    
043        public Set newSet() {
044            return new UnorderedUnlimitedSet();
045        }
046    
047        public Set union(Set set) {
048            Set result = new UnorderedUnlimitedSet();
049            HashMap setData[] = new HashMap[2];
050    
051            setData[0] = data;
052            setData[1] = ((UnorderedUnlimitedSet)set).data;
053    
054            for (int i=0; i<setData.length; i++) {
055                Iterator it = setData[i].keySet().iterator();
056                while (it.hasNext()) {
057                    result.addElement(((Long)setData[i].get(it.next())).longValue());
058                }
059            }
060    
061            return result;
062        }
063    
064        public Set intersection(Set set) {
065            HashMap otherData = ((UnorderedUnlimitedSet)set).data;
066            Set result = new UnorderedUnlimitedSet();
067    
068            Iterator it = data.keySet().iterator();
069            while (it.hasNext()) {
070                Long value = (Long)data.get(it.next());
071                if (otherData.containsValue(value))
072                    result.addElement(value.longValue());
073            }
074    
075            return result;
076        }
077    
078        public boolean exist(long element) {
079            return data.containsValue(new Long(element));
080        }
081    
082        public boolean equals(Set set, float percent) {
083            Set union = union(set);
084            Set intersection = intersection(set);
085    
086            return ((float)intersection.size()/(float)union.size()) >= percent;
087    
088        }
089    
090        public float getOrderedMatch(UnorderedUnlimitedSet next) {
091            HashMap source = data, target = next.data;
092            Iterator it = source.keySet().iterator();
093            int accum = 0, count = 0;
094            float result;
095    
096            while (it.hasNext()) {
097                Long mappedId = (Long)source.get(it.next());
098                //if (target.containsValue(mappedId)) continue;
099                accum += mappedId.intValue();
100                count++;
101            }
102            result = (float)accum/(float)count;
103    
104            accum = count = 0;
105            it = target.keySet().iterator();
106            while (it.hasNext()) {
107                Long mappedId = (Long)target.get(it.next());
108                //if (source.containsValue(mappedId)) continue;
109                accum += mappedId.intValue();
110                count++;
111            }
112            result = Math.abs(result - (float)accum/(float)count);
113    
114            return result;
115        }
116    
117        public long getMaxEntityId() {
118            int maxId = 0;
119    
120            Iterator it = data.keySet().iterator();
121            while (it.hasNext()) {
122                Long mappedId = (Long)data.get(it.next());
123                if (maxId < mappedId.intValue())
124                    maxId = mappedId.intValue();
125            }
126            return maxId;
127        }
128    
129        public long getHashValue() {
130            return 0;
131        }
132    
133        public Object clone() {
134            UnorderedUnlimitedSet o = (UnorderedUnlimitedSet)super.clone();
135            o.data = HelperFuncs.cloneHashMap(data);
136    
137            return o;
138        }
139    }