removing members from an ArrayList

i am adding an object "pnew" to a queue (which i am implementing as an arrayList--same thing right?) after I add it i need to back up a step so I have a "remove" method which takes off the last element in "pnew".  The problem is that when I remove the member from "pnew", it also removes it from the queue.  The queue is an ArrayList of paths, pnew is an ArrayList of integers

path pnew = new path(start);
ArrayList<path> queue = new ArrayList<path>();

queue.add(pnew);
pnew.remove();
jpking72Asked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Mayank SAssociate Director - Product EngineeringCommented:
>> which i am implementing as an arrayList--same thing right

You mean the ArrayList implements a queue? It can....

Though it looks like you have:

/* Queue --> */ path pnew = new path(start);
/* ArrayList --> */ ArrayList<path> queue = new ArrayList<path>(); // also named as 'queue' ?

>> pnew.remove();

We need to know what is the implementation of the path class and what it does.
0
jpking72Author Commented:
====================================================

        int source = this.findNode(a);
        int sink = this.findNode(b);
        curr.add(source);
        path p = new path(curr);
        queue.add(p);
       
       
       
        for (int row = 0; row < nodes.length; row++) {
            path pnew = queue.remove(0);
            for (int col = 0; col < nodes.length;  col++) {
                if (matrixCap[row][col] != 0) {
                    pnew.add(col);
                    if (pnew.contains(sink))
                        System.out.println(queue.toString());
                    queue.add(pnew);
                    pnew.remove();
                }
        }
           
       
    }
========================================
class path
========================================
public class path {
   
    private ArrayList<Integer> in = new ArrayList<Integer>();
   
    /** Creates a new instance of path */
    public path(ArrayList<Integer> i) {
       
        for (int j = 0; j < i.size(); j ++) {
            in.add(j, i.get(j));
        }
       
    }
   
    public ArrayList<Integer> add(Integer i) {
       
        in.add(i);
        return in;
    }
   
    public ArrayList<Integer> remove() {
       
        if (in.size() >0){
        in.remove(in.size()-1);
        return in;}
       
        else return in;
       
    }
   
    public boolean contains(int sink) {
        for (int i = 0; i < in.size(); i++) {
            if (in.get(i).equals(sink))
                return true;
        }
        return false;
    }
   
    public String toString() {
        StringBuilder out = new StringBuilder();
        out.append("found path: ");
       
        for (int i = 0; i < in.size(); i++)  {
            out.append(in.get(i));
            out.append(" ");
        }    
            return out.toString();
       
   
}
}
0
Mayank SAssociate Director - Product EngineeringCommented:
'queue' is an array list of path, so there is not a direct relationship between path and 'queue'.
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
Fundamentals of JavaScript

Learn the fundamentals of the popular programming language JavaScript so that you can explore the realm of web development.

jpking72Author Commented:
i don't understand...i rewrote the code and still the same problem:
when I update current[i], queue also changes the previous entry in the ArrayList.  I want it to add another distinct array to the end of the ArrayList every time.

ArrayList<int[]> queue = new ArrayList<int[]>();
int[] current = new int[10];

for (col = 0; col<nodes.length; col++) {
current[i] = col;
queue.add(current)
}
0
jpking72Author Commented:
hello?
0
Mayank SAssociate Director - Product EngineeringCommented:
If path holds Integers, maybe even the array list should be of Integers

ArrayList <Integer> queue = new ArrayList <Integer> () ;

>> hello?

Be patient - I come here in my free time and our time zones could also be different. Any reason for the C  grade?
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Java

From novice to tech pro — start learning today.