Проект LRU на Java - PullRequest
       16

Проект LRU на Java

0 голосов
/ 26 февраля 2020

У меня был проект о LRU на Java. Я использовал ArrayList, чтобы сохранить свои объекты (которые назывались Kisi), удалил последний объект Obj, чтобы установить размер ArrayList (до 5). Я закончил, но мне интересно, есть ли какой-нибудь более простой способ сделать это?

Кстати, я использовал качели и пружины для создания объектов.

В моем коде есть часть:

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

Ответы [ 2 ]

2 голосов
/ 26 февраля 2020

l oop, который вы используете для поиска индекса k объекта, который соответствует вашему элементу в liste ArrayList, может дать лучшую производительность и удобочитаемость, если вы используете метод indexOf.

То есть: -
Вместо цикла 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));

Возвращает -1, если k не найден в liste
Вы можете использовать это возвращаемое значение вместо совпадения liste.size() == 6, если это также подходит для вашего варианта использования.

Java Do c

Возможны и другие предложения, но я думаю, что потребуется дополнительная информация о вашем коде, как указано в комментариях. Надеюсь, это поможет!

0 голосов
/ 26 февраля 2020

Я предполагаю, что с 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;
    }
}
...