permaculture playing cards*
The moose likes Java in General and the fly likes Understanding 2D ArrayLists Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of OCM Java EE 6 Enterprise Architect Exam Guide this week in the OCMJEA forum!
JavaRanch » Java Forums » Java » Java in General
Bookmark "Understanding 2D ArrayLists" Watch "Understanding 2D ArrayLists" New topic
Author

Understanding 2D ArrayLists

Richard Mittleman
Greenhorn

Joined: Apr 19, 2010
Posts: 10
My background is over 50 years of programming 3rd generation languages so much of what I code is colored by that experience. Now I am coding java & many things I don't understand. Can someone help me to understand the following problem.

I need a 2-d array, array, of !0 rows by 4 columns. The members of the array are booleans & I need to be able to set array(row, column) to TRUE or FALSE


Case 1:
In Java define a 2-D array:

Next define an array of booleans and initialize 4 elements to false:

Finally set up 10 rows of 4 columns of booleans:

To set an element at (2,3) to true

But what happens is every row's column 3 is set to true;

In order to get the array set to work properly the construction of the rowOFBooleans must be put inside the 'for loop'.

Case 2:

My surmise is that in the first case Java doesn't store the values of rowOfBooleans in the twoDArray but rather stores a pointer to the ArrayList rowOfBooleans. Thus when ever an element is changed each row is pointing to the same rowOfBooleans.

In the second case each row is pointing to a different rowOfBooleans.

Can anyone help me understand what is happening?

Thank you.


Wouter Oet
Saloon Keeper

Joined: Oct 25, 2008
Posts: 2700

First a small question:

Do you need a ArrayList<ArrayList<Boolean>>(10) or could a boolean[10][4] do the trick as well?


"Any fool can write code that a computer can understand. Good programmers write code that humans can understand." --- Martin Fowler
Please correct my English.
Joanne Neal
Rancher

Joined: Aug 05, 2005
Posts: 3506
    
  14
Richard Mittleman wrote:My surmise is that in the first case Java doesn't store the values of rowOfBooleans in the twoDArray but rather stores a pointer to the ArrayList rowOfBooleans. Thus when ever an element is changed each row is pointing to the same rowOfBooleans.

Correct

Richard Mittleman wrote:In the second case each row is pointing to a different rowOfBooleans.

Correct again

Richard Mittleman wrote:Can anyone help me understand what is happening?

You appear to understand it pretty well.


Note however that an array is not the same thing as an ArrayList. So if you do need a 2-D array, you may want to follow Wouter's hint.


Joanne
Richard Mittleman
Greenhorn

Joined: Apr 19, 2010
Posts: 10
Yes I do need ArrayLists as the number of rows & columns can increase as the program is running.
Richard Mittleman
Greenhorn

Joined: Apr 19, 2010
Posts: 10
It may seem that I understand it from the outside but from the inside of my head the question keeps coming up "Why is it done that way?
David O'Meara
Rancher

Joined: Mar 06, 2001
Posts: 13459

or change your iteration to create a new list for each row:


Note that the pointers to the false value from the first list will be used (it is a shallow copy) but we are protected since Booleans are immutable and you will need to supply a new instance rather than changing the value of the instance.
I also prefer Boolean.valueOf(false) but that is outside the scope of the question
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: Understanding 2D ArrayLists