Creating 2 D arraylist

M

maralfarshadi

Dear All

Could you please explain or refer some reading material on how to
create two dimensional array lists ? and how to access the fields with
columns and row indexes ?


Extremely appreciate your help
Maral
 
P

Piotr Kobzda

Could you please explain or refer some reading material on how to
create two dimensional array lists ? and how to access the fields with
columns and row indexes ?

There is no such think like "two dimensional array list" in Java.

However, the List of Lists may bey used as closest equivalent of two
dimensional Java arrays.

See the following example:

import java.util.*;

public class TwoDiALExample {

static <T> ArrayList<List<T>> create2DArrayList(
int rows, int columns, T init) {
ArrayList<List<T>> list = new ArrayList<List<T>>();
for(int r = 0; r < rows; ++r) {
list.add(new ArrayList<T>(
Collections.nCopies(columns, init)));
}
return list;
}

public static void main(String[] args) {
List<List<Integer>> twodial
= create2DArrayList(3, 3, 0);

twodial.get(1).set(1, 1);
System.out.println(twodial);
}
}


When the number of your columns is fixed, you may also use a single
array list, and compute each element's index using the following formula:

listIndex = row * columnWidth + column



Alternatively, consider using a Map (most likely HashMap, or TreeMap)
with a keys made of row, and column pairs. It likely would not be as
fast as array list based variant, but allows to achieve fully dynamic
equivalent of two-dimensional indexed structure.


HTH,
piotr
 
P

Piotr Kobzda

Could you please explain or refer some reading material on how to
create two dimensional array lists ? and how to access the fields with
columns and row indexes ?

There is no such thing like "two dimensional array list" in Java.

However, the List of Lists may bey used as closest equivalent of two
dimensional Java arrays.

See the following example:

import java.util.*;

public class TwoDiALExample {

static <T> ArrayList<List<T>> create2DArrayList(
int rows, int columns, T init) {
ArrayList<List<T>> list = new ArrayList<List<T>>();
for(int r = 0; r < rows; ++r) {
list.add(new ArrayList<T>(
Collections.nCopies(columns, init)));
}
return list;
}

public static void main(String[] args) {
List<List<Integer>> twodial
= create2DArrayList(3, 3, 0);

twodial.get(1).set(1, 1);
System.out.println(twodial);
}
}


When the number of your columns is fixed, you may also use a single
array list, and compute each element's index using the following formula:

listIndex = row * columnWidth + column



Alternatively, consider using a Map (most likely HashMap, or TreeMap)
with a keys made of row, and column pairs. It likely would not be as
fast as array list based variant, but allows to achieve fully dynamic
equivalent of two-dimensional indexed structure.


HTH,
piotr
 
M

maralfarshadi

Thank you very much for the answer and code. Since I am using fixed
columns, I guess this method of finding index as you mentioned
(listIndex = row * columnWidth + column ) is great ... I just have one
concern .... If I use EL to display the arraylist in JSP, how can I
display it in tabular format ? If I use foreach , it will be displayed
as a single column , not tabular.

Thank you again
Maral
 
L

Lew

Thank you very much for the answer and code. Since I am using fixed
columns, I guess this method of finding index as you mentioned
(listIndex = row * columnWidth + column ) is great ... I just have one
concern .... If I use EL to display the arraylist in JSP, how can I
display it in tabular format ? If I use foreach [sic] , it will be displayed
as a single column , not tabular.

There is a principle Andrew often mentions: look to the goal rather than the
strategy.

Your goal, if I may be so bold, is to display a table of values. Your
strategy seems to be to layout the table column by column and row by row in
your data structure. Another strategy is to use a JSP layout that maps value
object attributes to columns of the table.

An EL, really we mean a JSTL, <c:forEach> works best with a list where each
column maps to an attribute of a value object, where the row represents the
public interface of the object, rather than a 2-D list. Then you get not just
one column but as many as you specify. It does couple the JSP to (some of)
the public attributes of the value object.

The Sun tutorial shows a typical example similar to:
<c:forEach var="item" items="${cart.items}">
<http://java.sun.com/javaee/5/docs/tutorial/doc/bnakh.html#bnakm>

(One might use the newer "pound-sign" unified EL expression "#{cart.items}".
This would affect the semantics of the expression.)

The 'items' attribute is a List<Item> (or even Iterable<Item>) where 'Item' is
the value object type. ('cart' is an object visible to the JSP at the start
of the loop.)

(Struts 1.x said:
<logic:iterate id="item" name="cart" property="items">
)

<c:forEach var="item" items="${cart.items}">
<tr>
<td><c:eek:ut value="${item.name}" /></td>
<td><c:eek:ut value="${item.worth}" /></td>
<td><c:eek:ut value="${item.contactInfo}" /></td>
</tr>
</c:forEach>

There are Java Server Faces components off the shelf that encapsulate this
sort of logic, although maybe not with the exact layout you're seeking.
<h:panelGrid> lays out a table that has a whole lot of options for headers,
footers, embedded components, Its purpose is to coordinate with a CSS style
sheet to produce really nice layouts backed by simple Collections or Maps of
value objects, possibly updatable.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,774
Messages
2,569,596
Members
45,143
Latest member
DewittMill
Top