Datenstruktur .. BlockingQueue (LIFO)

diggaa1984

Top Contributor
hiho,

ich habe eine Anforderung die verlangt, dass ich je nach Strategie verschiedene Abarbeitungsreihenfolgen von Anfragen umsetzen muss:

FIFO = first in first out
LIFO = last in first out
HIFO = highest in first out (complexity - attribut in Klasse MyQuery)
LOFO = lowest in first out (ebenfalls über complexity realisiert)
RAFO = random first out

complexity wird in MyQuery in der compareTo-Methode genutzt, als "natürliche Ordnung".
Im Code nutze ich dann noch eine Sequenznummer um identisch komplexe Anfragen nach Eingang zu sortieren (nur der Info wegen).

das ganze sieht nun so aus, je nach Strategie nutz ich eine andere Datenstruktur.

Java:
public class SearchEngine implements Runnable {

	public enum Strategy {
		FIFO,
		HIFO,
		LIFO,
		LOFO,
		RAFO;
	}//Strategy
	
	private Strategy strategy;
	private BlockingQueue<MyQuery> queue;
	private double rate;
	private boolean keepRunning;
	
	
	public SearchEngine(Strategy strategy, double rate) {
		this.strategy = strategy;
		this.rate = rate;
		keepRunning = true;
		
		switch (strategy) {
			case FIFO:
				queue = new LinkedBlockingQueue<MyQuery>();
				break;
			case HIFO:
				queue = new PriorityBlockingQueue<MyQuery>(11, new Comparator<MyQuery>() {
					public int compare(MyQuery first, MyQuery second) {
						int result = first.compareTo(second) *(-1); 
						if (result == 0) {
							return (first.getSeqNum() < second.getSeqNum()? -1:1);
						} else {
							return result; 
						}//if
					}//compare
				});
				break;
			case LIFO:
				//FEHLERHAFT, kann net casten zur Laufzeit :) .. Versuch meinerseits
				queue = (BlockingQueue<MyQuery>) Collections.asLifoQueue(new LinkedBlockingDeque<MyQuery>());
				break;
			case LOFO:
				queue = new PriorityBlockingQueue<MyQuery>(11, new Comparator<MyQuery>() {
					public int compare(MyQuery first, MyQuery second) {
						int result = first.compareTo(second); 
						if (result == 0) {
							return (first.getSeqNum() < second.getSeqNum()? -1:1);
						} else {
							return result; 
						}//if
					}//compare
				});
				break;
			case RAFO:
				queue = new PriorityBlockingQueue<MyQuery>(11, new Comparator<MyQuery>() {
					Random rand = new Random();
					public int compare(MyQuery first, MyQuery second) {
						//random insertion into list
						return rand.nextInt(3)-1;
					}//compare
				});
				break;
		}//sitch
	}//constructor

bis auf LIFO funktionieren alle wie erwartet. Bei Lifo bekommt er zu Runtime ne ClassCastException, was ich fast angenommen hatte :(
Exception in thread "main" java.lang.ClassCastException: java.util.Collections$AsLIFOQueue cannot be cast to java.util.concurrent.BlockingQueue
at SearchEngine.<init>(SearchEngine.java:47)
at Main.setupEngines(Main.java:18)
at Main.main(Main.java:9)

Die Frage ist, wie bekomm ich am einfachsten ne LIFO die das BlockingQueue-Interface widerspiegelt, muss ich mir das selbst basteln?
Code:
Collections.asLifoQueue()
liefert mir ja
Code:
Queue<T>
zurück, das müsste nun eine BlockingQueue werden :D
 
Zuletzt bearbeitet:

XHelp

Top Contributor
Du bekommst nicht zwingen eine BlockingQueue zurück, deswegen kannst du ja auch nicht zu BlockingQueue casten.
Kannst ja
Code:
queue
nur als
Code:
Queue
deklarieren.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Eigene Datenstruktur um eine Menge zu speichern Allgemeine Java-Themen 3
Kirby.exe Union Find Datenstruktur Allgemeine Java-Themen 27
U Klassen Komplexe Datenstruktur in Java Allgemeine Java-Themen 4
J Datenstruktur für eine Map erstellen Allgemeine Java-Themen 2
B Suche geeignete Datenstruktur Allgemeine Java-Themen 5
ruutaiokwu datenstruktur welche sich "im kreis" dreht Allgemeine Java-Themen 26
P Große Datenstruktur im Speicher halten Allgemeine Java-Themen 13
B Suche passende Datenstruktur für 2 Einträge Allgemeine Java-Themen 19
G Welche Datenstruktur? Allgemeine Java-Themen 19
R Collections Datenstruktur gesucht Allgemeine Java-Themen 12
D Datenstruktur für Hierarchie/Baum mit Tiefe 3 Allgemeine Java-Themen 8
P Suche Datenstruktur Allgemeine Java-Themen 2
S Welche Datenstruktur für verschiedene Sprachen sinnvoll? Allgemeine Java-Themen 2
ruutaiokwu schnelle datenstruktur... Allgemeine Java-Themen 13
S Baumstruktur/Datenstruktur in Datei speichern Allgemeine Java-Themen 23
D Datenstruktur Allgemeine Java-Themen 2
B Datenstruktur: Liste Allgemeine Java-Themen 5
A Thread sichere Datenstruktur Allgemeine Java-Themen 5
J Arrayähnliche Datenstruktur Allgemeine Java-Themen 4
B Script Problem "Dynamische Datenstruktur" Allgemeine Java-Themen 13
S Frage zum Design der Datenstruktur Allgemeine Java-Themen 10
G Datenstruktur: LISTEN Allgemeine Java-Themen 7
D Suche nach passender Datenstruktur Allgemeine Java-Themen 4
N Datenstruktur für Netze gesucht Allgemeine Java-Themen 8
G Daten von Excel kopieren - sinnvolle Datenstruktur? Allgemeine Java-Themen 3
U eigene Datenstruktur ArrayList<String> nach Object [][ Allgemeine Java-Themen 2
F welche Datenstruktur? Allgemeine Java-Themen 9
F Welche Datenstruktur Allgemeine Java-Themen 2
T Datenstruktur gesucht Allgemeine Java-Themen 18
T Datenstruktur für großes Netz Allgemeine Java-Themen 2
Z Welche Datenstruktur verwende ich h_ier bloss ? Allgemeine Java-Themen 14
G NullPointer. in einer Datenstruktur Allgemeine Java-Themen 2
S Welche Datenstruktur passt bei mir? Allgemeine Java-Themen 6
H Speicheverbrauch einer Datenstruktur ermitteln Allgemeine Java-Themen 29
S Suche geeignete Datenstruktur Allgemeine Java-Themen 27
S Datenstruktur für einen Baum Allgemeine Java-Themen 5
D Welche Datenstruktur? Allgemeine Java-Themen 2
T Datenstruktur für Straße ! Allgemeine Java-Themen 5
B Datenstruktur elegant zerlegen Allgemeine Java-Themen 6
G Datenstruktur gesucht: Allgemeine Java-Themen 3
A Datenstruktur und Sortierung Allgemeine Java-Themen 12
S BlockingQueue mit dynamischer Anpassung der Anzahl von Producer und Consumer Threads Allgemeine Java-Themen 1
S Code 'innerhalb' des synchronen Bereichs einer BlockingQueue ausfuehren..? Allgemeine Java-Themen 7
Q Memory-Leak in BlockingQueue Allgemeine Java-Themen 3
S BlockingQueue mit maximaler Groesse 1? Allgemeine Java-Themen 5
L Java Thread [blockingqueue] hängt sich auf Allgemeine Java-Themen 13
B LIFO von FIFO unterscheiden Allgemeine Java-Themen 12

Ähnliche Java Themen

Neue Themen


Oben