返回前删除Java向量

返回前删除Java向量,java,generics,vector,Java,Generics,Vector,我解决了它,但我不知道我的解决方案是否是最好的。因此,欢迎提供任何有用的信息 我试图建立一个给定向量的方法,例如:[a,b,c,e]应该返回向量[[a,b],[a,c],[a,e]]。我用它来做BFS public Vector<Vector<E>> routesFrom(Vector<E> edges) { E source = edges.firstElement(); Vector<Vector<E>> r

我解决了它,但我不知道我的解决方案是否是最好的。因此,欢迎提供任何有用的信息

我试图建立一个给定向量的方法,例如:[a,b,c,e]应该返回向量[[a,b],[a,c],[a,e]]。我用它来做BFS

    public Vector<Vector<E>> routesFrom(Vector<E> edges) {
    E source = edges.firstElement();
    Vector<Vector<E>> returner = new Vector<>();
    Vector<E> insert = new Vector<>();
    for (int i=1; i<edges.size(); i++) {
        insert.add(edges.firstElement());
        insert.add(edges.elementAt(i));
        returner.add(insert);
        insert.removeAllElements();
    }
    return returner;
}
公共向量路由自(向量边){
E source=edges.firstElement();
向量返回器=新向量();
向量插入=新向量();
对于(int i=1;i
在Java中,对象是通过引用传递的。由于这是传递到
returner
向量中的同一个对象,因此当删除其元素时,
returner
向量也会丢失这些元素

修复:在循环内创建一个新向量

Vector<Vector<E>> returner = new Vector<>();
for (int i=1; i<edges.size(); i++) {
    Vector<E> insert = new Vector<>();
    insert.add(edges.firstElement());
    insert.add(edges.elementAt(i));
    returner.add(insert);
}
与:

returner.add(新向量(插入);

这也为您省去了强制转换对象的麻烦。

谢谢您的帮助。我刚刚找到了一个解决方案,并在原始帖子中发布了它。每当我插入时,它都会使用clone()。您能检查一下并告诉我它是否正常,或者它是否会给我带来问题。很好。我觉得它可能会有问题。再次感谢您的帮助Noob先生:)
insert.removeAllElements();
Vector<Vector<E>> returner = new Vector<>();
for (int i=1; i<edges.size(); i++) {
    Vector<E> insert = new Vector<>();
    insert.add(edges.firstElement());
    insert.add(edges.elementAt(i));
    returner.add(insert);
}
returner.add(castObj(insert.clone()));
returner.add(new Vector<E>(insert);