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 }