Java 上的 LRU 项目

LRU Project on Java

我在 Java 上有一个关于 LRU 的项目。我使用 ArrayList 来保留我的对象(名为 Kisi),删除了最后一个 Obj 以设置 ArrayList 的大小(至 5)。我已经完成了,但我想知道有没有更简单的方法来做到这一点?

顺便说一句,我使用 swing 和 spring 来创建对象。

我的代码有一部分:

Kisi k = ctx.getBean("kisi", Kisi.class);
k.setName(textName.getText());
k.setSurname(textSurname.getText());

for (int i = 0; i < liste.size(); i++) {
//  if (k.getName().equalsIgnoreCase(liste.get(i).getName())
//  && k.getSurname().equalsIgnoreCase(liste.get(i).getSurname())) {
//      liste.remove(i);
//  }
    if(k.equals(liste.get(i))) {
        liste.remove(i);
    }
}

liste.add(0, k);
model.clear();

if (liste.size() == 6) {
    JOptionPane.showMessageDialog(contentPane, liste.get(liste.size()-1)+" Silindi");
    liste.remove(liste.size()-1);
}

for (Kisi kisi : liste) {
    model.addElement(kisi);
}

textName.setText("");
textSurname.setText("");

如果您使用 indexOf,您用于查找与 liste ArrayList 中的项目匹配的 k 对象索引的循环可以提供更好的性能和可读性方法代替。

即:-
而不是 for 循环;

for (int i = 0; i < liste.size(); i++) {
//                  if (k.getName().equalsIgnoreCase(liste.get(i).getName())
//                          && k.getSurname().equalsIgnoreCase(liste.get(i).getSurname())) {
//                      liste.remove(i);
//              }
                    if(k.equals(liste.get(i))) {
                        liste.remove(i);

                    }
                }

我建议你简单地做这样的事情;

liste.remove(liste.indexOf(k));

如果在 liste 中找不到 k,则此 returns -1
如果这也适合您的用例,您可以使用 return 值而不是匹配 liste.size() == 6

Java Doc

可能还有其他建议,但我想需要更多关于评论中提到的代码的信息。 希望这对您有所帮助!

我假设 LRU 是指缓存。

这是一个使用 LinkedHashMap 的实现:

public class LRUCache<K, V> extends LinkedHashMap<K, V>
{
    private static final long serialVersionUID = 1L;
    private int cacheSize;

    public LRUCache( int cacheSize )
    {
        super( cacheSize, 0.75f, true );
        this.cacheSize = cacheSize;
    }

    protected boolean removeEldestEntry( Map.Entry<K, V> eldest )
    {
        return size() >= cacheSize;
    }
}