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 }