Solved

ArrayLists in ArrayLists/HashMaps?

Posted on 2016-09-23
4
51 Views
Last Modified: 2016-09-23
I am currently a student in AP Computer Science trying to write a program that makes Applets much easier to make. My teacher loves applets, and me and my classmates detest them. To do so, the best way that I can think of saving coordinates is through ArrayLists in Arraylists in HashMaps. However, I can't seem to get this to work.

The reason I need a ArrayList in an ArrayList is because when you make a polygon, the parameters include two arrays - one for the x coordinates, and one for the y coordinates. These two would originally be ArrayLists. Those ArrayLists need to be stored into an ArrayList that contains all of the paramters, which is stored in a HashMap that stores all of the polygons.

Lets take this example:
HashMap<String, ArrayList<Object>> polygons= new HashMap<String, ArrayList<Object>>();
polygons.put("Polygon 1", new ArrayList<Object>());
polygons.get("Polygon 1").add(new ArrayList<Integer>());

Open in new window


This gives me a runtime error if I were to try to read any of the ArrayLists, and I get a compile time error if I try adding something to the innermost ArrayList.

Am I going about this in the wrong way? Is there 1. a better way to do this, or 2. a way to make this way work?
0
Comment
Question by:Ben Esposito
  • 2
  • 2
4 Comments
 
LVL 26

Expert Comment

by:dpearson
ID: 41812860
You're close.

// This is fine:
polygons.put("Polygon 1", new ArrayList<Object>());

// This is not:
polygons.get("Polygon 1").add(new ArrayList<Integer>());

// Let's break this out:
List<Integer> list = polygons.get("Polygon 1") ; // This is returning a list already
list.add(new ArrayList<Integer>()) ; // This tries to add a list to a list - not what you want

// So maybe try something like this:
List<Integer> list = polygons.get("Polygon 1") ;
list.add(6) ; // This should work - assuming the list has already been added to the hashmap.  If it hasn't you'll get a null pointer exception here.

Does that help?

Doug
1
 

Author Comment

by:Ben Esposito
ID: 41813007

// This is not:
polygons.get("Polygon 1").add(new ArrayList<Integer>());

// Let's break this out:
List<Integer> list = polygons.get("Polygon 1") ; // This is returning a list already
list.add(new ArrayList<Integer>()) ; // This tries to add a list to a list - not what you want

But I do want to add a list to a list. Here is my organization of data:
HashMap<String, ArrayList<Object> polygons; <-- This contains all polygons
When a polygon is created, it needs three parameters: int[] xcoords, int[] ycoords, and int # of points
The first two parameters would originally be ArrayList<Integer>()s, and then the third element in the ArrayList<Object> (from polygons) would be the third parameter.
0
 
LVL 26

Accepted Solution

by:
dpearson earned 500 total points
ID: 41813062
If you want a list of lists then the map should be:

HashMap<String, ArrayList<ArrayList<Object>>>

so the values are lists of lists.

But that is a pretty ugly way to represent 3 values int[], int[], int

A much more natural representation would be:
HashMap<String, Polygon>

class Polygon {
   List<Integer> xcoords ;
   List<Integer> ycoords ;
   int nPoints ; // Actually redundant - xcoords.size() is this too
}

So you add a Polygon object to the map and then retrieve it, get the xcoords member and call "add" on it:

Polygon p = polygons.get("Polygon 1") ;
p.xcoords.add(6) ;
p.ycoords.add(12) ;
p.nPoints = p.nPoints+1 ;

Doug
2
 

Author Closing Comment

by:Ben Esposito
ID: 41813112
Thank you! This helps a lot. I have never made a class for making objects, so I'm glad I'm learning this. I started doubting how possible this would be, but now it seems much more doable.
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

An old method to applying the Singleton pattern in your Java code is to check if a static instance, defined in the same class that needs to be instantiated once and only once, is null and then create a new instance; otherwise, the pre-existing insta…
Introduction Java can be integrated with native programs using an interface called JNI(Java Native Interface). Native programs are programs which can directly run on the processor. JNI is simply a naming and calling convention so that the JVM (Java…
Viewers learn about the “while” loop and how to utilize it correctly in Java. Additionally, viewers begin exploring how to include conditional statements within a while loop and avoid an endless loop. Define While Loop: Basic Example: Explanatio…
Viewers learn how to read error messages and identify possible mistakes that could cause hours of frustration. Coding is as much about debugging your code as it is about writing it. Define Error Message: Line Numbers: Type of Error: Break Down…

895 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

15 Experts available now in Live!

Get 1:1 Help Now