gpt4 book ai didi

java - 我想使用 Collections.sort 对 "HighlightedCellRecords"的通用堆栈进行排序,但出现运行时错误

转载 作者:行者123 更新时间:2023-12-02 05:49:52 24 4
gpt4 key购买 nike

我以前没有使用过Collections.sort。也许我不能用它来对我的通用对象堆栈进行排序。我发现了一个有希望的例子here ,并且它已编译,但我遇到了运行时错误,如代码下方所示。

package gbl;
import java.awt.Color;
import java.util.Collections;
import java.util.List;

public class HighightedCellRecord implements Comparable<HighightedCellRecord>{
char content;
int row,
col;
Color foreground,
background;
boolean isVertex;

public HighightedCellRecord() { }

public HighightedCellRecord(char ch, int r, int c, Color f, Color b){//,

content = ch;
row = r;
col = c;
foreground = f;
background = b;
isVertex = false;
}

@Override
public int compareTo(HighightedCellRecord o)
{
if(this.row == o.row)
{
if (this.col > o.col) return 1;
else if (this.col == o.col) return 0;
else return -1;
}
else
{
if (this.row > o.row) return 1;
else if (this.row == o.row) return 0;
else return -1;
}
}

public String toString(){
return "<" + content + "> @ (" + row + "," + col + ")";
}

public String toWrite(){
return content + "," + row + "," + col;
}

public static void main(String[] args) {

GenericStack<HighightedCellRecord> s ;

s = new GenericStack<>();

s.push(new HighightedCellRecord('O', 3, 7, null, null));
s.push(new HighightedCellRecord('D', 3, 9, null, null));
s.push(new HighightedCellRecord('W', 3, 6, null, null));
s.push(new HighightedCellRecord('R', 3, 8, null, null));

/////////////////// error on next line /////////////////////////////

Collections.sort((List<HighightedCellRecord>) s);

for(int i = 0; i < s.size(); i++)
System.out.println(s.find(i));
}

}

...

Exception in thread "main" java.lang.ClassCastException: 
gbl.GenericStack cannot be cast to java.util.List
at gbl.HighightedCellRecord.main(HighightedCellRecord.java:58)
Java Result: 1

但是,我想出了一个解决方法,我不知道这是否是唯一的方法。这是修改后的 main (来自上面显示的错误点下方):

t = new LinkedList<>();

while(s.isNotEmpty())
t.add(s.pop());

Collections.sort(t);

while(! t.isEmpty())
s.push(t.pop());

我意识到,根据定义和概念,堆栈不同于链表,也不同于队列,但我不太明白为什么我不能在堆栈上使用Collections.sort这只是一种特殊类型的链表,不是吗,如我的通用堆栈定义的前几行所示:

public class GenericStack<E>  {  

public LinkedList <E> stack = new LinkedList<>();

底线是,如果我需要对其进行排序,它不应该是堆栈吗?

有没有办法直接对我的堆栈进行排序?如果没有,我会看看需要付出多少努力才能将其更改为简单的链接列表。 (我在程序中使用了另外三个堆栈:一个用于撤消,一个用于重做,另一个用于事务。我想我得意忘形了。)

最佳答案

您的GenericStack不是List ;它包含一个List

假设您实现了push(...)方法通过添加到LinkedList前面;只需采用相同的方法进行排序即可:

public class GenericStack<E> {

// you should really make this private;
//you want to hide your implementation
public LinkedList<E> stack = new LinkedList<>();


// ...
public void sort() {
Collections.sort(stack);
}
}

然后不要调用 Collections.sort((List<...>)s);只需调用s.sort()

您的另一个选择是制作 GenericStack实现List 。或者,只需使用 LinkedList直接,因为它实现了 DeQue .

关于java - 我想使用 Collections.sort 对 "HighlightedCellRecords"的通用堆栈进行排序,但出现运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23667243/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com