【发布时间】:2015-01-29 18:54:01
【问题描述】:
我正在编写一个有序队列。在顶部有高优先级的元素,从最旧的 到 最新的排序。中间部分中优先级元素和底部低优先级元素部分相同。
当我想对一个新元素进行排序时,我通常可以参考列表的最后一个元素。如果最后一个元素具有更高或相同的优先级,我的新元素将被放置在所有元素之后。
现在,在最后一个元素的优先级低于我的新元素的情况下,我必须找到一种方法来遍历列表并找到谓词“优先级低于新元素的第一个元素"适用。那么我的新元素应该在那个位置。
我正在使用 compareTo 来比较两个元素。
我是一个完全的初学者,我很难找到解决这个问题的方法。
非常感谢每一个帮助。
提前谢谢你
我尝试了类似的方法:
public Queue<T> queue;
public OrderedQueue() {
queue = new LinkedList<T>();
}
public void enqueue(T newitem) {
int sss;
if (isEmpty()) {
((LinkedList<T>) queue).add(newitem);
}
else if (newitem instanceof BulkParcel) {
((LinkedList<T>) queue).addLast(newitem);
}
else if (newitem instanceof StandardParcel || newitem instanceof PriorityParcel) {
if (newitem.compareTo(((LinkedList<T>) queue).getLast()) == 0) {
((LinkedList<T>) queue).addLast(newitem);
}
else if (newitem.compareTo(((LinkedList<T>) queue).getLast()) < 0) {
((LinkedList<T>) queue).addLast(newitem);
}
else
for (Iterator<T> it = queue.iterator(); it.hasNext();) {
sss = newitem.compareTo(it.next());
((LinkedList<T>) queue).add((((LinkedList<T>) queue).indexOf(sss==-1)), newitem);
}
}
}
我能够完成我想要的。 这是我的新代码,供所有仍然感兴趣的人使用。
public void enqueue(T newitem) {
int pos = -1;
int compVal = 2;
if (isEmpty()) {
((LinkedList<T>) queue).add(newitem);
}
else if (newitem.compareTo(((LinkedList<T>) queue).getLast()) == 0
|| newitem.compareTo(((LinkedList<T>) queue).getLast()) < 0) {
((LinkedList<T>) queue).addLast(newitem);
}
else {
for (Iterator<T> it = queue.iterator(); it.hasNext() && compVal != 1;) {
compVal = newitem.compareTo(it.next());
pos = pos + 1;
}
((LinkedList<T>) queue).add(pos, newitem);
}
}
我有一个自写的方法“compareTo”,对于 a.compareTo(b);,如果 a 小于 b(这里将是优先级),则返回 -1,如果它们相等则返回 0,并且如果 a 大于 b,则为 1。
感谢所有帮助和详细解答! :)
【问题讨论】:
-
您的回复似乎不适合 cmets,请将其添加到原始问题中?
-
在您的问题下使用edit 选项添加新信息。无法在注释中正确格式化代码。
-
另外,这是学校的问题吗?如果是这样,问题需要特殊处理,我们需要问题的文本。
-
这正是@MeetTitan 所说的LinkedHashMap,它是HashMap+LinkedList 的组合。您可以查看文档。