如何将types集合转换为ArrayList?

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”中的exceptionjava.lang.ClassCastException:java.util.Collections $ UnmodifiableCollection不能转换为java.util.ArrayList …

谁能帮忙?

正如其他人所提到的,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()); 

然而,在另一个评论中,你说这是给你一个编译器错误。 它看起来像你的类MyGraph是一个generics类。 所以getVertices()实际上返回typesV,而不是typesmyNode。

我认为你的代码应该是这样的:

 public V getNode(int nodeId){ ArrayList<V> myNodeList = new ArrayList<V>(this.getVertices()); return myNodeList(nodeId); } 

但是,这表示这是一个非常低效的方式来提取节点。 你可能想要做的是将节点存储在二叉树中,然后当你得到第n个节点的请求时,你做一个二分search。

试试这个代码

将ArrayList转换为集合

  ArrayList<User> usersArrayList = new ArrayList<User>(); Collection<User> userCollection = new HashSet<User>(usersArrayList); 

将Collection转换为ArrayList

  Collection<User> userCollection = new HashSet<User>(usersArrayList); List<User> userList = new ArrayList<User>(userCollection ); 
 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; } 

使用上面的方法将集合转换为列表

以下代码将失败:

 List<String> will_fail = (List<String>)Collections.unmodifiableCollection(new ArrayList<String>()); 

这反而会工作:

 List<String> will_work = new ArrayList<String>(Collections.unmodifiableCollection(new ArrayList<String>())); 

明确的答案需要更多的信息,但是这个代码

 myNodeList = (ArrayList<MyNode>)this.getVertices(); 

只有this.getVertices()返回List<MyNode>的(子types)时才会有效。 如果它是一个不同的集合(如你的exception似乎表明),你想使用

 new ArrayList<MyNode>(this.getVertices()) 

只要getVertices返回一个Collectiontypes就可以工作。