L
LexDanny
Gast
Hallo!
Ich habe einen Array, für den ich (zwecks Zeitvergleich mit einer Queue) in einer for-Schleife einen Wert hinzufüge und gleich wieder lösche.
Zeittest.java:
Die Funktionen removeFirst(), addFirst etc. sind definiert und funktionieren auch einwandfrei. Bei der Queue sieht es änhlich aus, nur dass halt q eine Queue ist. Und der Queue Ablauf funktioniert!
Das Probleme ist in der for-Schleife bei j. Wenn j<=500 funktioniert das Ganze. Allerdings braucht die Schleife dann so wenig Zeit, dass sich ein Vergleich nicht lohnt. Also wollte ich das öfter durchlaufen lassen. Müsste meines Erachtens nach auch funktionieren, da ja immer das selbe Element bzw. am selben Index entfernt und hinzugefügt wird. Allerdings kommt eine Exception, dass der Array voll ist. Das kann ja aber nur auftreten, wenn das entfernen nicht klappt.
Hier die Datei Deque.java
und Array.java:
Jemand eine Idee woran das liegt?
Danke im Vorraus
Ich habe einen Array, für den ich (zwecks Zeitvergleich mit einer Queue) in einer for-Schleife einen Wert hinzufüge und gleich wieder lösche.
Zeittest.java:
Java:
Array q1 = new Array(1000);
Object o1 = new Object();
Object g = new Object();
g="";
for (int i=1; i<500; i++)
{
q1.addFirst(o1);
}
double time_before1 = System.currentTimeMillis();
for (int j=1; j<=10000; j++)
{
q1.removeFirst();
q1.addFirst(g);
}
double time_after1 = System.currentTimeMillis();
double time1= time_after1-time_before1;
System.out.print("Die 2. Schleife dauerte: " +time1+ " Sekunden");
Die Funktionen removeFirst(), addFirst etc. sind definiert und funktionieren auch einwandfrei. Bei der Queue sieht es änhlich aus, nur dass halt q eine Queue ist. Und der Queue Ablauf funktioniert!
Das Probleme ist in der for-Schleife bei j. Wenn j<=500 funktioniert das Ganze. Allerdings braucht die Schleife dann so wenig Zeit, dass sich ein Vergleich nicht lohnt. Also wollte ich das öfter durchlaufen lassen. Müsste meines Erachtens nach auch funktionieren, da ja immer das selbe Element bzw. am selben Index entfernt und hinzugefügt wird. Allerdings kommt eine Exception, dass der Array voll ist. Das kann ja aber nur auftreten, wenn das entfernen nicht klappt.
Hier die Datei Deque.java
Java:
public interface Deque{
int capacity();
int size();
void clear();
void addFirst(Object e) throws DequeFull;
void addLast(Object e) throws DequeFull;
Object removeFirst() throws DequeEmpty;
Object removeLast() throws DequeEmpty;
}
class DequeFull extends Exception {
private static final long serialVersionUID = 1L;
}
class DequeEmpty extends Exception {
private static final long serialVersionUID = 1L;
}
und Array.java:
Java:
public class Array implements Deque{
int anzahl;
int max_Anzahl;
int first;
int last;
Object[] list;
public Array(int max_A) {
max_Anzahl=max_A;
first = 1;
anzahl = 0;
list = new Object[max_Anzahl];
last = list.length -1;
}
public int capacity(){
return max_Anzahl;
}
public int size(){
return anzahl;
}
public void clear(){
first = 1;
last = list.length;
anzahl = 0;
}
public void addFirst(Object e) throws DequeFull{
if (anzahl == list.length)
throw new DequeFull();
anzahl++;
int index = first-1;
if (index <0)
index = list.length -1;
first = index;
list[index] = e;
if (anzahl == 1)
last = index;
}
public void addLast(Object e) throws DequeFull{
if (anzahl == list.length)
throw new DequeFull();
anzahl++;
int index = last +1;
if (index >= list.length)
index = 0;
last = index;
list[index] = e;
if (anzahl==1)
first = index;
}
public Object removeFirst() throws DequeEmpty{
if (anzahl == 0)
throw new DequeEmpty();
Object element = list[first];
first = first +1;
if (first>list.length)
first = 0;
return element;
}
public Object removeLast() throws DequeEmpty{
if (anzahl == 0)
throw new DequeEmpty();
Object element = list[last];
last = last -1;
if (last<0)
last= list.length -1;
return element;
}
}
Jemand eine Idee woran das liegt?
Danke im Vorraus