2016-05-03 2 views
2

Ich habe ein Problem, wo ich eine Datenstruktur brauche, die mich eine Reihe von Auftragsobjekten (hat Preis und Menge) in sortierter Reihenfolge speichert, so dass ich die mit leicht abrufen kann der niedrigste Preis. Die einzigen Operationen, die ich brauche, sind 'Einfügen' und 'Abrufen kleinster', wodurch eine Prioritätswarteschlange eine gute Wahl ist. Das Problem ist aber, dass ich auch die Reihenfolge der Duplikate verfolgen muss, damit immer das erste Duplikat angezeigt wird das wird zuerst abgerufen. Duplikate sind nur Aufträge, die in diesem Fall den gleichen Preis haben.Java - Alternative zu PriorityQueue, die doppelten Insertionsauftrag hält

Die Java PriorityQueue Klasse scheint keine Versprechen in Bezug auf die Abrufreihenfolge von Duplikaten zu machen, also brauche ich eine andere Alternative. Was würdest du empfehlen?

Antwort

6

Sie können ein Feld hinzufügen oder das Element mit einem Atomzähler und/oder Zeitstempel umhüllen, um die ursprüngliche Reihenfolge aufzuzeichnen.

+3

Genau. Verwenden Sie den Konstruktor, der einen Komparator akzeptiert, und vergleichen Sie den Zähler oder Zeitstempel sowie die Element-ID. –

+1

Hinzufügen zu Atomic Counters wäre es z.B. ** Initialize **: 'final static AtomicInteger counter = neuer AtomicInteger();' ** Usage **: 'counter.getAndIncrement()' würde jeden aktuellen Wert atomar um eins erhöhen. –