Solved

ArrayLists in ArrayLists/HashMaps?

Posted on 2016-09-23
39 Views
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>());
``````

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
Question by:Ben Esposito
• 2
• 2

LVL 26

Expert Comment

ID: 41812860
You're close.

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

// This is not:

// 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

ID: 41813007

// This is not:

// 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

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.nPoints = p.nPoints+1 ;

Doug
2

Author Closing Comment

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

Suggested Solutions

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…
Java functions are among the best things for programmers to work with as Java sites can be very easy to read and prepare. Java especially simplifies many processes in the coding industry as it helps integrate many forms of technology and different d…
Viewers will learn about arithmetic and Boolean expressions in Java and the logical operators used to create Boolean expressions. We will cover the symbols used for arithmetic expressions and define each logical operator and how to use them in Boole…
This tutorial covers a step-by-step guide to install VisualVM launcher in eclipse.