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.HashMap;
011    import java.util.Iterator;
012    
013    public class UnorderedSet extends Set{
014        private HashMap data;
015    
016        public UnorderedSet(int interval) {
017            data = new HashMap();
018            size = interval;
019            emptySlot = 0;
020        }
021    
022        public boolean exist(long element) {
023    
024            return data.containsKey(new Long(element));
025    
026        }
027    
028        public Set newSet() {
029            return new UnorderedSet(size);
030        }
031    
032        public long getElement(int index) {
033            Iterator it = data.keySet().iterator();
034            int i = 0;
035            while (it.hasNext()) {
036                Long key = (Long)it.next();
037                if (i<index) continue;
038                return key.longValue();
039            }
040            return -1;
041        }
042    
043        public void addElement(long element) {
044            if (emptySlot>=size) {
045                System.out.println("Set is full, unable to add new elements!!!");
046                return;
047            }
048            Long key = new Long(element);
049            if (data.containsKey(key)) {
050                Long value = (Long)data.get(key);
051                data.put(key, new Long(value.longValue()+1));
052            } else {
053                data.put(key, new Long(1));
054            }
055            emptySlot++;
056        }
057    
058        public Set union(Set set) {
059            Set result = new UnorderedSet(size*2);
060            HashMap setData[] = new HashMap[2];
061    
062            setData[0] = data;
063            setData[1] = ((UnorderedSet)set).data;
064    
065            for (int i=0; i<setData.length; i++) {
066                Iterator it = setData[i].keySet().iterator();
067                while (it.hasNext()) {
068                    result.addElement(((Long)it.next()).longValue());
069                }
070            }
071    
072            return result;
073        }
074    
075        public Set intersection(Set set) {
076            HashMap setData[] = new HashMap[2];
077            Set result = new UnorderedSet(size);
078    
079            setData[0] = data;
080            setData[1] = ((UnorderedSet)set).data;
081    
082            Iterator it = setData[0].keySet().iterator();
083            while (it.hasNext()) {
084                Long key = (Long)it.next();
085                if (setData[1].containsKey(key))
086                    result.addElement(key.longValue());
087            }
088    
089            return result;
090        }
091    
092        public boolean equals(Set set, float percent) {
093            float counter = 0;
094            HashMap setData[] = new HashMap[2];
095    
096            setData[0] = data;
097            setData[1] = ((UnorderedSet)set).data;
098    
099            Iterator it = setData[0].keySet().iterator();
100            while (it.hasNext()) {
101                Long key = (Long)it.next();
102                if (setData[1].containsKey(key))
103                    counter = counter + ((Long)setData[0].get(key)).longValue()+((Long)setData[1].get(key)).longValue();
104            }
105    
106            return ((100*counter/(2*size)) >= percent);
107        }
108    
109        public long getHashValue() {
110            long result = 0;
111    
112    
113            Iterator it = data.keySet().iterator();
114            while (it.hasNext()) {
115                Long key = (Long)it.next();
116                result = result ^ key.intValue();
117            }
118    
119            return result;
120        }
121    
122        public long getEntityId(int i) {
123            if (data.size() == 0)
124                return -1;
125    
126            Iterator it = data.keySet().iterator();
127    
128            return ((Long)it.next()).longValue();
129        }
130    
131        public Object clone() {
132            return super.clone();
133        }
134    }