HashTableOverflowException ?

Status
Nicht offen für weitere Antworten.
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:

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
 
S

SlaterB

Gast
WARUM willst du die importieren/ verwenden?
ist das irgendeine Vorgabe? wenn es eine Vorgabe ist, warum wird sie dann nicht genauer benannt/ mitgeliefert?

viel wahrscheinlicher scheint mir, dass du selber ein Exception diesen Namens erstellen sollst
 
S

SlaterB

Gast
das fragst du mich? ;)

genauso könntest du mich fragen ob du die Exception
EltonIstDaException()
brauchst..

wenn du sie haben willst, dann schreibe sie dir,
alternativ eine andere Exception oder gar keine werfen..
 
G

Guest

Gast
ok danke für die schnelle antwort, du hast eigentlich schon recht, ich kann ja irgendeine x-beliebige Exception ausgeben.
Ich dachte nur, und diesen Quellcode habe ich aus einem Buch, dass ich eben diese Exception benutzen soll.

Alogrithmen und Datenstrukturen, 2. überarbeitete und erweiterte Auflage (Saake, Sattler),
erweiterbares Hashing
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben