MulaiMulai sekarang secara gratis

Mengimplementasikan cache LRU

Anda sedang mengembangkan aplikasi web yang sering mengambil informasi profil pengguna sebagai string. Untuk meningkatkan kinerja, Anda ingin mengimplementasikan cache sederhana yang menyimpan string profil tersebut dan dapat mengidentifikasi entri mana yang paling jarang digunakan.

Kelas CacheEntry telah disiapkan untuk Anda.

Latihan ini adalah bagian dari kursus

Optimasi Kode di Java

Lihat Kursus

Petunjuk latihan

  • Dalam metode get(), ambil entri cache untuk key yang ditentukan.
  • Setelah mengambil key, perbarui waktu aksesnya.
  • Setelah menaruh entri ke dalam cache, jika kapasitas terlampaui, hapus entri yang paling jarang digunakan.

Latihan interaktif praktis

Cobalah latihan ini dengan menyelesaikan kode contoh berikut.

public class StringCache {
    private final int capacity = 100;
    private final Map cache = new HashMap<>();
    
    public String get(String key) {
        // Get the entry for the specified key
        CacheEntry entry = ____.get(____);
        if (entry == null) return null;
        // Update its access time
        entry.____();
        return entry.value;
    }
    
    public void put(String key, String value) {
        cache.put(key, new CacheEntry(value));
        if (cache.size() > capacity) {
            // If capacity exceeded, remove least recently used
            ____();
        }
    }

    void removeLeastRecentlyUsed() {
        String lruKey = null;
        long oldest = Long.MAX_VALUE;
        for (Map.Entry e : cache.entrySet()) {
            if (e.getValue().lastAccessed < oldest) {
                oldest = e.getValue().lastAccessed;
                lruKey = e.getKey();
            }
        }
        if (lruKey != null) { cache.remove(lruKey); }
    }

    public static void main(String[] args) {}
}
Edit dan Jalankan Kode