Я MyQ классСортировка PriorityQueue дает странное поведение на Ubuntu?
class MyQ{
Queue<Request> q = new PriorityQueue<Request>(7, new SortRequest());
QueueStorage qStorage = new QueueStorage();
public void addRequest(int siteId, int timeStamp){
try{
q = qStorage.readRequestQ();
q.add(new Request(sId, tStamp));
qStorage.writeRequestQ(q);
}catch(Exception e){
e.printStackTrace();
}
//similarly deleteRequest() and showRequest() method follows.
}
Мой Запрос класс содержит два поля int id
и int count
вместе с сеттеров и добытчиками.
SortRequest класс что-то вроде этого:
class SortRequest implements Comparator<Request>, Serializable{
public int compare(Request r1, Request r2) {
if(r1.getCount()!=r2.getCount())
return new Integer(r1.getCount()).compareTo(r2.getCount());
if(r1.getId()!=r2.getId())
return new Integer(r1.getId()).compareTo(r2.getId());
return 0;
}
}
И класс QStorage что-то вроде:
class QStorage{
Queue<Request> readReqQ = new PriorityQueue<Request>(7, new SortRequest());
public Queue<Request> readRequestQ() {
try{
FileInputStream fin = new FileInputStream("/home/winn/requestQ.ser");
ObjectInputStream ois = new ObjectInputStream(fin);
readReqQ = (Queue)ois.readObject();
}
catch(Exception e){
return null;
}
return readReqQ;
}
public void writeRequestQ(Queue<Request> rq){
Queue<Request> requestQ = rq;
try{
FileOutputStream fos = new FileOutputStream("/home/winn/requestQ.ser");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(requestQ);
System.out.println("done");
}catch(Exception e){
e.printStackTrace();
}
}
}
А также я храню эту очередь в файле после каждого добавления/операции опроса с использованием Поток ввода/вывода объекта. Добавляя элемент, я сначала читаю сохраненные записи, а затем добавляю новую запись и снова сохраняю ее.
Ограничение: идентификатор должен быть уникальным, счетчик может быть одинаковым/различным для двух или более идентификаторов. Итак, я выполняю сортировку по параметру count, но в случае, если count такой же, я должен получить порядок сортировки таким образом, чтобы нижний идентификатор должен предшествовать более высокому.
Сначала я попробовал эту программу на своей системе Linux, где она работала правильно и правильно выдавала порядок сортировки в соответствии с моими ожиданиями. Но потом каким-то образом я удалил все файлы классов, а также создал новый файл для хранения, а теперь тот же код (после перекомпиляции) дал мне совершенно странные результаты. Его даже не сортировка на основе параметра count. Почему это так?
Затем я попробовал тот же код в моей системе Windows 7, его снова начали производить правильные результаты. Почему такое странное поведение? Пожалуйста, помогите. Благодарю.
Какой код дает какие-то странные результаты, по сравнению с ожиданиями? – EJP
Код компаратора, дающий странные результаты. Когда я впервые пробовал этот код, он работал правильно, и компаратор сортировал мой список должным образом в соответствии с параметром count. Но в следующий раз, когда я удалил все файлы классов и повторно скомпилировал один и тот же код, он не выполняет сортировку. Это может показаться вам глупой проблемой, но это происходит с моей Linux-системой. Я не знаю почему? – Winn
Я тогда пробовал это на Windows 7, работая правильно и поддерживая порядок сортировки. – Winn