Linked List Queue.shift() vs Array.shif()

Benchmark created on


Setup

class ListNode {
  value = undefined;
  prev = null;
  next = null;

  constructor(value) {
    this.value = value;
  }
}


class Queue {
  #cursor = null;
  #tail = null;

  push(value) {
    const node = new ListNode(value);
    if (this.#tail) {
      this.#tail.next = node;
      this.#tail = this.#tail.next;
      return;
    }

    if (!this.#cursor) {
      this.#cursor = node;
      this.#tail = node;
      return;
    }
  }

  shift() {
    if (!this.#cursor) {
      return null;
    }

    const { value } = this.#cursor;
    this.#cursor = this.#cursor.next;
    return value;
  }
}

const queue1 = new Queue();
const queue2 = [];

for (var i = 0;i<1000000;i++) {
  queue1.push(i);
  queue2.push(i);
}

Test runner

Ready to run.

Testing in
TestOps/sec
Linked List Queue.shift()
queue1.push(5);
queue1.shift();
ready
Array.shift()
queue2.push(5)
queue2.shift()
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.