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
。
可能还有其他建议,但我想需要更多关于评论中提到的代码的信息。
希望这对您有所帮助!
我假设 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;
}
}
我在 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
。
可能还有其他建议,但我想需要更多关于评论中提到的代码的信息。 希望这对您有所帮助!
我假设 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;
}
}