Java - 如何将类型集合转换为ArrayList?

2022-08-31 16:50:07
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...

任何人都可以帮忙吗?


答案 1

正如其他人所提到的,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是一个通用类。因此,getVertices() 实际上返回类型 V,而不是类型 myNode。

我认为你的代码应该看起来像这样:

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

但是,也就是说,这是一种非常低效的提取节点的方法。您可能要做的是将节点存储在二叉树中,然后当您收到对第n个节点的请求时,执行二进制搜索。


答案 2

试试这个代码

将数组列表转换为集合

  ArrayList<User> usersArrayList = new ArrayList<User>();

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

将集合转换为数组列表

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

  List<User> userList = new ArrayList<User>(userCollection );