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 }