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;
Run Code Online (Sandbox Code Playgroud)
以下是错误消息:
线程"main"中的异常java.lang.ClassCastException:java.util.Collections $ UnmodifiableCollection无法强制转换为java.util.ArrayList ...
有人可以帮忙吗?
Cha*_*ere 80
正如其他人提到的,ArrayList有一个构造函数,它接受一组项目,并添加所有项目.这是文档:
http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html#ArrayList%28java.util.Collection%29
所以你需要这样做:
ArrayList<MyNode> myNodeList = new ArrayList<MyNode>(this.getVertices());
Run Code Online (Sandbox Code Playgroud)
但是,在另一个评论中,你说这给你一个编译器错误.看起来你的类MyGraph是一个泛型类.所以getVertices()实际上返回了类型V,而不是类型myNode.
我认为你的代码应该是这样的:
public V getNode(int nodeId){
ArrayList<V> myNodeList = new ArrayList<V>(this.getVertices());
return myNodeList(nodeId);
}
Run Code Online (Sandbox Code Playgroud)
但是,这表示提取节点是一种非常低效的方法.您可能想要做的是将节点存储在二叉树中,然后当您收到第n个节点的请求时,执行二进制搜索.
Dwi*_* Ji 20
试试这个代码
将ArrayList转换为Collection
ArrayList<User> usersArrayList = new ArrayList<User>();
Collection<User> userCollection = new HashSet<User>(usersArrayList);
Run Code Online (Sandbox Code Playgroud)
将Collection转换为ArrayList
Collection<User> userCollection = new HashSet<User>(usersArrayList);
List<User> userList = new ArrayList<User>(userCollection );
Run Code Online (Sandbox Code Playgroud)
public <E> List<E> collectionToList(Collection<E> collection)
{
List<E> list;
if (collection instanceof List)
{
list = (List<E>) collection;
}
else
{
list = new ArrayList<E>(collection);
}
return list;
}
Run Code Online (Sandbox Code Playgroud)
使用上面的方法将集合转换为列表
以下代码将失败:
List<String> will_fail = (List<String>)Collections.unmodifiableCollection(new ArrayList<String>());
Run Code Online (Sandbox Code Playgroud)
这将起作用:
List<String> will_work = new ArrayList<String>(Collections.unmodifiableCollection(new ArrayList<String>()));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
133810 次 |
最近记录: |