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

use*_*691 50 java collections

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)


San*_*waj 7

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)

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


Mir*_*ciu 6

以下代码将失败:

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)