M
MannieFresh
Gast
Hallo, ich muss zum Thema dynamisches Hashing ein Referat machen, und es in Java umsetzen.
Hab auch schon angefangen, eine Fehlermeldung kommt aber noch:
Hier meine Klassen:
und
Die zweite Klasse ist eigentlich uninterssant, jetzt meine Frage, wie importiere die Exception "HashTableOverflowException" in der interface "Hashing"; ich habs mit allen möglichen Packages versucht, aber geht nichts.
In der API gibt es zwei mögliche HashTableOverflowExceptions:
www.oxygenxml.com/apidoc/eXist-snapshot-20060316/org/exist/util/hashtable/AbstractHashtable.HashtableOverflowException.html
und
www.rz.rwth-aachen.de/mata/downloads/algo_dat/ProgrammCode/00_algodat_2004/doc/hashing/HashTableOverflowException.html
Wie kann ich diese Packages importieren, wo finde ich diese? Ich bin schon am Verzweifeln :bahnhof:
Ich hoffe, ich finde unter euch JAVA-Meistern eine Antwort.
Ich bedanke mich schon jetzt für alle Beiträge
Hab auch schon angefangen, eine Fehlermeldung kommt aber noch:
Hier meine Klassen:
Code:
public interface Hashing
{
void add(Object o) throws HashTableOverflowException;
boolean contains(Object o);
}
und
Code:
public class ExtendibleHashing implements Hashing2 {
final static int MAXSIZE=5;
static class Block
{
ArrayList elems = new ArrayList();
int bdepth;
public Block(int d)
{
bdepth=d;
}
public ArrayList elements()
{
return elems;
}
public int getDepth()
{
return bdepth;
}
}
private int depth;
private Block hashIndex[] = null;
private BitSet hashValueToBitSet(Object o)
{
BitSet bits = new BitSet(32);
int h = o.hashCode();
for(int i=0;i<32;i++)
{
bits.set(i, ((h&(1<<i))!=0));
}
return bits;
}
private int getPosition(Object o, int d)
{
BitSet bits = hashValueToBitSet(o);
int pos=0;
for(int i=0;i<d;i++)
{
pos*=2;
if(bits.get(i)) pos++;
}
return pos;
}
private void extendIndex()
{
int nsize=1<<depth;
Block newIndex[] = new Block[nsize*2];
for(int i=0;i<nsize;i++)
{
newIndex[2*i]=hashIndex[i];
newIndex[2*i+1]=hashIndex[i];
}
hashIndex=newIndex;
depth++;
}
public void add(Object o)
{
int idx=getPosition(o, depth);
Block b = hashIndex[idx];
if(b.elements().contains(o))
return;
while(b.elements().size()==MAXSIZE)
{
//solange Block voll ist
if(b.getDepth()==depth)
{
extendIndex();
idx=getPosition(o, depth);
}
splitBlock(idx);
b = hashIndex[idx];
}
//Element hinzufügen
b.elements().add(o);
}
private void splitBlock(int idx)
{
Block b= hashIndex[idx];
Block b0 = new Block(b.getDepth()+1);
Block b1 = new Block(b.getDepth()+1);
Iterator it = (Iterator) b.elements().iterator();
while(((java.util.Iterator) it).hasNext())
{
Object elem = it.next();
BitSet bits = hashValueToBitSet(elem);
if(!bits.get(b.getDepth()))
((Object) b0.elements()).addElement(elem);
else
b1.elements().addElement(elem);
it.remove();
}
int diff = depth - b.getDepth();
int zdiff = 1<<diff; //2dif Einträge
int start=(idx/zdiff)*zdiff;
for(int i=start; i<start+zdiff;i++)
{
if(i<start+(1<<(diff-1)))
hashIndex[i]=b0;
else
hashIndex[i]=b1;
}
}
}
}
Die zweite Klasse ist eigentlich uninterssant, jetzt meine Frage, wie importiere die Exception "HashTableOverflowException" in der interface "Hashing"; ich habs mit allen möglichen Packages versucht, aber geht nichts.
In der API gibt es zwei mögliche HashTableOverflowExceptions:
www.oxygenxml.com/apidoc/eXist-snapshot-20060316/org/exist/util/hashtable/AbstractHashtable.HashtableOverflowException.html
und
www.rz.rwth-aachen.de/mata/downloads/algo_dat/ProgrammCode/00_algodat_2004/doc/hashing/HashTableOverflowException.html
Wie kann ich diese Packages importieren, wo finde ich diese? Ich bin schon am Verzweifeln :bahnhof:
Ich hoffe, ich finde unter euch JAVA-Meistern eine Antwort.
Ich bedanke mich schon jetzt für alle Beiträge