Как удалить объект из приоритетной очереди определенного пользователем типа - PullRequest
0 голосов
/ 04 мая 2020

моя очередь приоритетов определена как

PriorityQueue< LRUCache > qu = new PriorityQueue<>(new Comp() );

здесь класс LRUCache имеет переменную key и freq, на основе которых я создал Comparator. если мне нужно удалить определенный объект из очереди приоритетов на основе определенного ключа и частоты, как я могу это сделать

qu.remove(new LRUCache(key , freq ) ) // like this or something better ??

1 Ответ

1 голос
/ 04 мая 2020

Да, но вы можете сначала переопределить equals() в своем классе LRUCache, потому что PriorityQueue использует его для поиска объекта для его удаления

    private int indexOf(Object o) {
        if (o != null) {
            final Object[] es = queue;
            for (int i = 0, n = size; i < n; i++)
                if (o.equals(es[i]))
                    return i;
        }
        return -1;
    }

, вы LRUCache класс с помощью equals()

        @Override
        public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null || obj.getClass() != this.getClass())
                return false;
            LRUCache cache = (LRUCache) obj;
            return key.equals(cache.key) && freq == cache.freq;
        }
...