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 }