为什么它抛出java.lang.classCastException

use*_*002 1 java stack

这是我的班级,我想对我的堆栈进行排序,但它会抛出异常请帮助我谢谢!

public class jj {
    public static void main(String[] args){
        Stack<Integer> s = new ImplimentingAStackUsingAnArrayOfAGivenSizeN(5);
        s.push(1);
        s.push(3);
        s.push(5);
        s.push(2);
        s.push(4);
        Collections.sort((List<Integer>) (s));
        System.out.println(s);
        while (!s.isEmpty()) {
            System.out.println(s.pop());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪:

Exception in thread "main" java.lang.ClassCastException: 
datastructurechapter5.ImplimentingAStackUsingAnArrayOfAGivenSizeN 
cannot be cast to java.util.List at datastructurechapter5.jj.main(jj.java:24)  
   `Collections.sort((List<Integer>) (s));`
Java Result: 1
BUILD SUCCESSFUL (total time: 2 seconds)
Run Code Online (Sandbox Code Playgroud)

Boz*_*zho 5

我假设你正在使用(和扩展)错误Stack.确保你有

import java.util.Stack;
Run Code Online (Sandbox Code Playgroud)

如果Stack是你的某类,你必须将它定义为要求List:

public class Stack implements List {..}
Run Code Online (Sandbox Code Playgroud)

但这将是很多工作,所以使用 java.util.Stack

注意:正如Jesper评论的那样,你最好使用java.util.Deque(也许ArrayDeque)

  • 请注意,`java.util.Stack`是遗留集合类,其文档建议使用`java.util.Deque`. (2认同)