【问题标题】:LRU Project on JavaJava 上的 LRU 项目
【发布时间】:2020-02-26 08:56:45
【问题描述】:

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

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

我的代码中有一部分:

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("");

【问题讨论】:

  • 嗨,欢迎来到 Stack Overflow。我建议您清楚地解释您的代码的作用以及您想要实现的目标。您想将元素 k 从位置 x 移动到 0,以便最近使用的最后一次位于第一个位置? model 是什么?可以添加modelliste的声明吗?

标签: java spring swing lru


【解决方案1】:

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

即:-
而不是 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,则返回 -1
如果这也适合您的用例,您可以使用该返回值而不是匹配 liste.size() == 6

Java Doc

可能还有其他建议,但我想您的代码需要更多信息,如 cmets 中所述。 希望这会有所帮助!

【讨论】:

    【解决方案2】:

    我假设 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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-28
      • 1970-01-01
      • 2017-12-06
      • 1970-01-01
      • 2015-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多