kostenloser Webspace werbefrei: lima-city


Ein Array mit ArrayListen

lima-cityForumProgrammiersprachenJava

  1. Autor dieses Themas

    pixilab

    Kostenloser Webspace von pixilab

    pixilab hat kostenlosen Webspace.

    Hallo, ich suche einen Weg Objekte an einer bestimmten Koordinate in einer Liste abzulegen.
    Dachte mir, ganz einfach, machst du ein 2dim-Array. in dem Listen drin sind, dann kann man Objekte wie Folgt sammeln.

    meinArray[1][2].add(meinObjekt1);
    meinArray[1][2].add(meinObjekt2);
    meinArray[1][2].add(meinObjekt3);
    meinArray[1][3].add(meinObjekt1);
    meinArray[2][1].add(meinObjekt1);
    ..


    Jetzt scheitere ich leider an dem Array, auf diese Weise lässt sich der nicht erstellen. :(

    Array<ArrayList<Objekt>>[][] quadrantList = new Array<ArrayList<Objekt>>[horizontalListSize][verticalListSize];


    Wie baut man denn dieses Array richtig auf, hab schon verschiedenen Varianten probiert, der Compiler mag die Type Arguments nicht, aber ich brauche sie doch.
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Hallo pixilab,

    das sollte gehen:
    ArrayList[][] quadrantList;
    quadrantList = new ArrayList[horizontalListSize][verticalListSize];
    for(int i=0; i<horizontalListSize;i++)
    for(int j=0; j<verticalListSize;j++)
        quadrantList[i][j] = new ArrayList<Object>();


    Edit: Meinen Mist korrigiert ;-)

    Beitrag zuletzt geändert: 26.5.2012 23:49:32 von darkpandemic
  4. Autor dieses Themas

    pixilab

    Kostenloser Webspace von pixilab

    pixilab hat kostenlosen Webspace.

    Vielen lieben Dank das funktioniert :)
    Es gibt noch eine kleine Warn-Meldung, vermutlich will der noch wissen, von welchem Typ die Objekte sind, die in der ArrayList abgelegt werden.

    Meldung bei "ArrayList[][] quadrantList;"

    ArrayList is a raw type. References to generic type ArrayList<E> should be parameterized


    Meldung bei "quadrantList[quadrant.getQuadrantX()][quadrant.getQuadrantY()].add(line);". line ist vom Typ "Line"

    Type safety: The method add(Object) belongs to the raw type ArrayList. References to generic type ArrayList<E> should be parameterized


    Auf das Objekt in der Liste greife ich folgendermaßen zu.

    for(int i=0; i<horizontalListSize; i++) {
    			for(int j=0; j<verticalListSize; j++) {
    				if(quadrantList[i][j].size() > 0) {
    					for(Object object : quadrantList[i][j]) {
    						Line testobject = (Line) object;


    Hab die Warnung versucht weg zubekommen. Der unten stehenden Versuch war leider erfolglos

    Cannot create a generic array of ArrayList<Object>
    ArrayList<Object>[][] quadrantList;
    		quadrantList = new ArrayList<Object>[horizontalListSize][verticalListSize];


    Vielleicht hat noch jemand einen Tipp, wie man diese ArrayList richtig parametrisiert :-) ?

    Beitrag zuletzt geändert: 27.5.2012 9:54:08 von pixilab
  5. Hallo pixilab,

    ich habe mal etwas nachgeforscht und dabei festgestellt, dass es in Java schlicht nicht möglich ist die Warnung weg zu bekommen. Ausgenommen man unterdrückt sie mit '@SuppressWarnings("unchecked")'.
    Das liegt an der Art und Weise, wie Generics in Java funktionieren.
    In Java werden Generics mittels 'Erasure' realisiert. D.h. ein generischer Kontainer vergisst seinen Typ bzw. aus der generischen Vorlage wird niemals eine echte typisierte Klasse mit Typsicherheit erzeugt.
    Daher ist die Typangabe bei der Deklaration eines generischen Kontainers eigentlich nur wirkungslose Kosmetik.
  6. Moin,

    zusätzlich zum Beitrag von darkpandemic kannst Du eine Typsicherheit "vortäuschen", indem Du ein wildcard benutzt:
    ArrayList<?>[][] quadrantList = new ArrayList<?>[hSize][vSize];
    Gruß,
    Pawnee

    Beitrag zuletzt geändert: 27.5.2012 20:23:36 von pawnee
  7. Autor dieses Themas

    pixilab

    Kostenloser Webspace von pixilab

    pixilab hat kostenlosen Webspace.

    Die Warnung ist mal an der einen, mal an der anderen Stelle. Egal wie ich es drehe.
    Wenn man das so schreibt sind die Warnungen zumindest, bei der Deklaration, Definition und beim Anwenden nicht zu sehen. Denke ich lass das erst mal so stehen. Solange es das tut was es soll, bin ich zufrieden. Hatte tagelang nach so einer Liste gegoogelt, bin richtig froh, dass ich hier Hilfe gefunden habe. :)

    @SuppressWarnings("unchecked")
    ArrayList<Object>[][] quadrantList = new ArrayList[horizontalListSize][verticalListSize]; 
    ...
    quadrantList[i][j] = new ArrayList<Object>();
    ...
    ArrayList<Object> linesAtCurPosition = quadrantList[i][j];




    Beitrag zuletzt geändert: 28.5.2012 1:17:53 von pixilab
  8. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!