Ben Esposito
asked on
ArrayLists in ArrayLists/HashMaps?
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:
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?
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>());
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?
ASKER
// 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.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
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.
// 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