← Alle AufgabenJavaScript · Senior

LRUCache

Schreib eine Klasse LRUCache(capacity): einen Cache, der bei vollem Speicher den Eintrag verdrängt, auf den am längsten nicht zugegriffen wurde.

get(key) liefert den Wert oder undefined und markiert den Schlüssel als kürzlich genutzt. put(key, value) fügt einen Wert hinzu oder aktualisiert ihn, was ebenfalls als Nutzung zählt. Die Eigenschaft size ist die aktuelle Zahl der Einträge. Beide Operationen müssen O(1) sein.

Tests (5)

  1. const c = new LRUCache(2);
    c.put('a', 1);
    c.put('b', 2);
    expect(c.get('a')).toBe(1);
    c.put('c', 3);
    expect(c.get('b')).toBe(undefined);
    expect(c.get('a')).toBe(1);
    expect(c.get('c')).toBe(3);
  2. const c = new LRUCache(2);
    c.put('a', 1);
    c.put('a', 10);
    c.put('b', 2);
    expect(c.size).toBe(2);
    expect(c.get('a')).toBe(10);
  3. const c = new LRUCache(2);
    c.put('a', 1);
    c.put('b', 2);
    c.put('a', 3);
    c.put('c', 4);
    expect(c.get('b')).toBe(undefined);
    expect(c.get('a')).toBe(3);
  4. const c = new LRUCache(1);
    c.put('x', 0);
    expect(c.get('x')).toBe(0);
    c.put('y', null);
    expect(c.get('x')).toBe(undefined);
    expect(c.get('y')).toBe(null);
  5. const c = new LRUCache(3);
    expect(c.get('missing')).toBe(undefined);
    expect(c.size).toBe(0);