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

o4tp2gmn  于 2023-11-15  发布在  Java
关注(0)|答案(5)|浏览(172)
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.
有人能帮忙吗?

dnph8jn4

dnph8jn41#

正如其他人所提到的,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个节点的请求时,你做一个二分搜索。

nnsrf1az

nnsrf1az2#

试试这个代码

将ArrayList转换为Collection

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);

laawzig2

laawzig23#

public <E> List<E> collectionToList(Collection<E> collection)
{
    return (collection instanceof List) ? (List<E>) collection : new ArrayList<E>(collection);
}

字符串
使用上述方法将集合转换为列表

vs91vp4v

vs91vp4v4#

以下代码将失败:

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

字符串
这反而会起作用:

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

mjqavswn

mjqavswn5#

需要更多的信息来确定答案,但这段代码

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

字符串
如果this.getVertices()返回List<MyNode>的(子类型),则 * 仅 * 有效。如果它是一个不同的集合(如您的Exception所示),则您希望使用

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


只要getVertices返回Collection类型,这就可以工作。

相关问题