Class: Concurrent::JavaPriorityQueue

Inherits:
Object
  • Object
show all
Defined in:
lib/concurrent/collection/priority_queue.rb

Overview

Note:

This implementation is not thread safe and performs no blocking.

A queue collection in which the elements are sorted based on their comparison (spaceship) operator ‘<=>`. Items are added to the queue at a position relative to their priority. On removal the element with the “highest” priority is removed. By default the sort order is from highest to lowest, but a lowest-to-highest sort order can be set on construction.

The API is based on the Queue class from the Ruby standard library.

The pure Ruby implementation, MutexPriorityQueue uses a heap algorithm stored in an array. The algorithm is based on the work of Robert Sedgewick and Kevin Wayne.

The JRuby native implementation is a thin wrapper around the standard library java.util.PriorityQueue.

When running under JRuby the class PriorityQueue extends JavaPriorityQueue. When running under all other interpreters it extends MutexPriorityQueue.

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(opts = {}) ⇒ JavaPriorityQueue

Create a new priority queue with no items.

Parameters:

  • (defaults to: {})

    the options for creating the queue

Options Hash (opts):

  • :order (Symbol) — default: :max

    dictates the order in which items are stored: from highest to lowest when :max or :high; from lowest to highest when :min or :low



228
229
230
231
232
233
234
235
# File 'lib/concurrent/collection/priority_queue.rb', line 228

def initialize(opts = {})
  order = opts.fetch(:order, :max)
  if [:min, :low].include?(order)
    @queue = java.util.PriorityQueue.new(11) # 11 is the default initial capacity
  else
    @queue = java.util.PriorityQueue.new(11, java.util.Collections.reverseOrder())
  end
end

Class Method Details

.from_list(list, opts = {}) ⇒ PriorityQueue

Create a new priority queue from the given list.

Parameters:

  • the list to build the queue from

  • (defaults to: {})

    the options for creating the queue

Returns:

  • the newly created and populated queue



289
290
291
292
293
# File 'lib/concurrent/collection/priority_queue.rb', line 289

def self.from_list(list, opts = {})
  queue = new(opts)
  list.each{|item| queue << item }
  queue
end

Instance Method Details

#clearObject

Removes all of the elements from this priority queue.



238
239
240
241
# File 'lib/concurrent/collection/priority_queue.rb', line 238

def clear
  @queue.clear
  true
end

#delete(item) ⇒ Object

Deletes all items from self that are equal to item.

Parameters:

  • the item to be removed from the queue

Returns:

  • true if the item is found else false



244
245
246
247
248
249
250
# File 'lib/concurrent/collection/priority_queue.rb', line 244

def delete(item)
  found = false
  while @queue.remove(item) do
    found = true
  end
  found
end

#empty?Boolean

Returns true if self contains no elements.

Returns:

  • true if there are no items in the queue else false



253
254
255
# File 'lib/concurrent/collection/priority_queue.rb', line 253

def empty?
  @queue.size == 0
end

#include?(item) ⇒ Boolean Also known as: has_priority?

Returns true if the given item is present in self (that is, if any element == item), otherwise returns false.

Parameters:

  • the item to search for

Returns:

  • true if the item is found else false



258
259
260
# File 'lib/concurrent/collection/priority_queue.rb', line 258

def include?(item)
  @queue.contains(item)
end

#lengthFixnum Also known as: size

The current length of the queue.

Returns:

  • the number of items in the queue



264
265
266
# File 'lib/concurrent/collection/priority_queue.rb', line 264

def length
  @queue.size
end

#peekObject

Retrieves, but does not remove, the head of this queue, or returns nil if this queue is empty.

Returns:

  • the head of the queue or nil when empty



270
271
272
# File 'lib/concurrent/collection/priority_queue.rb', line 270

def peek
  @queue.peek
end

#popObject Also known as: deq, shift

Retrieves and removes the head of this queue, or returns nil if this queue is empty.

Returns:

  • the head of the queue or nil when empty



275
276
277
# File 'lib/concurrent/collection/priority_queue.rb', line 275

def pop
  @queue.poll
end

#push(item) ⇒ Object Also known as: <<, enq

Inserts the specified element into this priority queue.

Parameters:

  • the item to insert onto the queue



282
283
284
# File 'lib/concurrent/collection/priority_queue.rb', line 282

def push(item)
  @queue.add(item)
end