diff --git a/include/utils/LruCache.h b/include/utils/LruCache.h
index 937fe1e..302b929 100644
--- a/include/utils/LruCache.h
+++ b/include/utils/LruCache.h
@@ -36,15 +36,38 @@
 
     void setOnEntryRemovedListener(OnEntryRemoved<TKey, TValue>* listener);
     size_t size() const;
-    const TKey& keyAt(size_t index) const;
-    const TValue& valueAt(size_t index) const;
-    void removeAt(size_t index);
     const TValue& get(const TKey& key);
     bool put(const TKey& key, const TValue& value);
     bool remove(const TKey& key);
     bool removeOldest();
     void clear();
 
+    class Iterator {
+    public:
+        Iterator(const LruCache<TKey, TValue>& cache): mCache(cache), mIndex(-1) {
+        }
+
+        bool next() {
+            mIndex = mCache.mTable->next(mIndex);
+            return mIndex != -1;
+        }
+
+        size_t index() const {
+            return mIndex;
+        }
+
+        const TValue& value() const {
+            return mCache.mTable->entryAt(mIndex).value;
+        }
+
+        const TKey& key() const {
+            return mCache.mTable->entryAt(mIndex).key;
+        }
+    private:
+        const LruCache<TKey, TValue>& mCache;
+        size_t mIndex;
+    };
+
 private:
     LruCache(const LruCache& that);  // disallow copy constructor
 
@@ -89,27 +112,6 @@
 }
 
 template <typename TKey, typename TValue>
-const TKey& LruCache<TKey, TValue>::keyAt(size_t index) const {
-    const Entry& entry = mTable->entryAt(index);
-    return entry.key;
-}
-
-template <typename TKey, typename TValue>
-const TValue& LruCache<TKey, TValue>::valueAt(size_t index) const {
-    const Entry& entry = mTable->entryAt(index);
-    return entry.value;
-}
-
-template <typename TKey, typename TValue>
-void LruCache<TKey, TValue>::removeAt(size_t index) {
-    if (index < 0) {
-        return;
-    }
-
-    mTable->removeAt(index);
-}
-
-template <typename TKey, typename TValue>
 const TValue& LruCache<TKey, TValue>::get(const TKey& key) {
     hash_t hash = hash_type(key);
     ssize_t index = mTable->find(-1, hash, key);
