Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsWhite Papers
Discussion GroupsFirst AidDatabasesJavaBeansGUIJava 3DVirtual MachineCORBASecurityToolsGeneral
Java DirectoryOpen Source ProjectsSample Book ChaptersUser GroupsWeb Resources
Related Topics
Databases.NETMore Topics ...

Java Forum / General / October 2007

Tip: Looking for answers? Try searching our database.

Creating 2 D arraylist

Thread view: 
maralfarshadi@yahoo.com - 07 Oct 2007 10:22 GMT
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
Piotr Kobzda - 07 Oct 2007 13:29 GMT
> 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
Piotr Kobzda - 07 Oct 2007 13:33 GMT
> 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
maralfarshadi@yahoo.com - 07 Oct 2007 18:32 GMT
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
Lew - 07 Oct 2007 22:08 GMT
> 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 <logic:iterate> tag works sort of like this, too.
> <logic:iterate id="item" name="cart" property="items">
)

 <c:forEach var="item" items="${cart.items}">
  <tr>
    <td><c:out value="${item.name}" /></td>
    <td><c:out value="${item.worth}" /></td>
    <td><c:out 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.

Signature

Lew



Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.