public class MyGraph<V,E> extends SparseMultigraph<V,E>{
private ArrayList<MyNode> myNodeList;
public MyNode getNode(int nodeId){
myNodeList = new ArrayList<MyNode>();
myNodeList = (ArrayList<MyNode>)this.getVertices();
int i;
字符串
以下是错误消息:
线程“main”中出现异常java.lang.ClassCastException:java.util.Collections$UnmodifiableCollection无法强制转换为java. util. ArrayList.
有人能帮忙吗?
5条答案
按热度按时间dnph8jn41#
正如其他人所提到的,ArrayList有一个构造函数,它接受一个项目集合,并添加所有项目。这里是文档:
http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html#ArrayList%28java.util.Collection%29
所以你需要做:
字符串
然而,在另一条评论中,你说这给了你一个编译器错误。看起来你的类MyGraph是一个泛型类。所以getVertices()实际上返回类型V,而不是类型myNode。
我认为你的代码应该看起来像这样:
型
但是,这是一种非常低效的提取节点的方法。你可能想做的是将节点存储在二叉树中,然后当你收到第n个节点的请求时,你做一个二分搜索。
nnsrf1az2#
试试这个代码
将ArrayList转换为Collection
字符串
将集合转换为数组列表
型
laawzig23#
字符串
使用上述方法将集合转换为列表
vs91vp4v4#
以下代码将失败:
字符串
这反而会起作用:
型
mjqavswn5#
需要更多的信息来确定答案,但这段代码
字符串
如果
this.getVertices()
返回List<MyNode>
的(子类型),则 * 仅 * 有效。如果它是一个不同的集合(如您的Exception所示),则您希望使用型
只要getVertices返回Collection类型,这就可以工作。