Java 在向量中的元素上迭代,以循环方式从最后一个元素环绕到第一个元素

Java 在向量中的元素上迭代,以循环方式从最后一个元素环绕到第一个元素,java,vector,iteration,Java,Vector,Iteration,我试图遍历包含随机生成的int值的排序向量对象。其思想是访问每个元素,输出其值,然后转到下一个元素 问题是我的迭代只访问/输出其他元素,而不是每个元素。我的代码如下: //note 'tempRequests' is a vector object containing randomly generated //int values int i = 0; Collections.sort(tempRequests); System.out.pri

我试图遍历包含随机生成的int值的排序向量对象。其思想是访问每个元素,输出其值,然后转到下一个元素

问题是我的迭代只访问/输出其他元素,而不是每个元素。我的代码如下:

    //note 'tempRequests' is a vector object containing randomly generated 
    //int values 

    int i = 0;

    Collections.sort(tempRequests);

    System.out.println("request vector is now: ");
    System.out.println(tempRequests);

    Vector<Integer> requestCopy = new Vector<Integer>();
    requestCopy = tempRequests;


    //for (int i = currentPosition; i < tempRequests.size()-1; i++)
    while (requestCopy.size() > 0)
    {   
        if (requestCopy.contains(tempRequests.get(i)))
        {
            System.out.println("Processing " + tempRequests.get(i));
            requestCopy.removeElement(tempRequests.get(i));
        }

        if (i+1 <= tempRequests.size()-1)
            i++;
        else
            i = 0;  
    }
我尝试过调整for循环,但不太明白为什么只访问其他元素。任何帮助或建议都将不胜感激。谢谢。

if (requestCopy.contains(tempRequests.get(i))) {
    System.out.println("Processing " + tempRequests.get(i));      
    requestCopy.removeElement(tempRequests.get(i));
}


此代码与您认为的不同:

Vector<Integer> requestCopy = new Vector<Integer>();
requestCopy = tempRequests;

因为你想要做的只是简单地迭代一个向量,打印出这些值,而不是创建一个拷贝,并且必须管理打印和从复制中移除元素,考虑使用迭代器。

Iterator value = tempRequests.iterator();
while(value.hasNext()){
    System.out.println("Processing: " + value.next());
}

以上四行代码将替换创建requestCopy向量的所有代码和您拥有的整个while循环

我认为您的requestCopy和tempRequests是对一个向量对象的两个引用

Vector requestCopy=new Vector()这一行您创建了新的向量,然后用引用tempRequests的对象替换新的向量对象。您不能以这种方式复制对象

删除
requestCopy=tempRequests和更新
Vector requestCopy=new Vector()
矢量请求复制=新矢量(临时请求)
然后它就会起作用


我希望能帮助您,谢谢。

requestCopy
tempRequests
引用同一个向量对象,因此
requestCopy.contains(tempRequests.get(I))
不能为false。
Vector<Integer> requestCopy = new Vector<Integer>();
requestCopy = tempRequests;
Vector<Integer> requestCopy = new Vector<>(tempRequests);
Iterator value = tempRequests.iterator();
while(value.hasNext()){
    System.out.println("Processing: " + value.next());
}