Sep: Geschachtelte Liste

Hallo,

ich würde gerne ein verschachtelte Liste fertigen.
Es soll in einer Liste diverse Attribute für eine HTML-Formatierung
enthalten sein. Weil die Anzahl der Elemente verschieden ist, soll
versucht werden unter einem Punkt in einer LinkedList jeweils zwei
Definitionen zu speichern. Einmal den Name (z.B. class) und zweitens
den Wert zu dem Namen (z.B. main).
Ich hab gedacht ich könnte das über ein Array in der Liste fertigen
aber leider schaffe ich es nicht das Array dann vernünftig auswerten
zu können. Ich zeige euch mal ein kleines Bsp., welches ich zum
Testen entworfen habe:

LinkedList list = new LinkedList();
String[] data = new String[2];

data[0] = "class";
data[1] = "main";
list.add( data );

data[0] = "id";
data[1] = "Hauptfeld";
list.add( data );

Iterator iter = data.iterator();
while( iter.hasNext() ) {
   //- Und wie macht man das jetzt, oder hab ich bereits zuvor
   //- einen Denkfehler?
}

  1. Hallo,

    LinkedList list = new LinkedList();
    String[] data = new String[2];

    data[0] = "class";
    data[1] = "main";
    list.add( data );

    data[0] = "id";
    data[1] = "Hauptfeld";
    list.add( data );

    Iterator iter = data.iterator();
    while( iter.hasNext() ) {

    String values = (String[])iter.next();
         System.out.println(values[0] + " " + values[1]);

    }

    (Vorsicht! Aus dem Kopf programmiert! :-))

    Ist es das, was du willst? Wenn nicht, habe ich die Frage nicht verstanden...

    Irgendwie erscheint mir eine Hashtable möglicherweise sinniger. Schau
    dir mal die Klasse java.util.Hashtable an. (Aber Vorsicht, die Werte
    darin werden nicht in der Reihenfolge gespeichert, in der sie eingefügt
    werden.)

    Gruß
    Slyh

    1. Hallo,

      hab deinen Tipp noch nicht ausprobiert. Hab auch schonmal an eine
      Hashtable gedacht nur da weiß ich nicht wie ich den Namen des Keys
      und den dazugehörigen Wert verwenden kann. Hab mich auch umgeschaut
      aber nichts passendes gefunden.

    2. Iterator iter = data.iterator();
      while( iter.hasNext() ) {
           String values = (String[])iter.next();
           System.out.println(values[0] + " " + values[1]);

      Leider wird mir auch so nur zweimal "id" und "name" ausgegeben.

      1. moin Sep :)

        Iterator iter = data.iterator();
        while( iter.hasNext() ) {
             String values = (String[])iter.next();
             System.out.println(values[0] + " " + values[1]);

        Leider wird mir auch so nur zweimal "id" und "name" ausgegeben.

        Du hast doch nur zwei eingefügt *wirr*

        Aber falls du auf die Reihenfolge keine Wert legst, würde ich dir tatsächlich ein Hashmap ans Herz legen.

        Und zwar füllst du das so:

        HashMap map=new HashMap();
        map.put("class", "main");
        map.put("id"", "Hauptfeld");

        und liest es so wieder aus:

        Iterator it=map.keySet().iterator();
        while(it.hasNext()){
          String key=it.next().toString();
          String value=map.get(key).toString();
          System.out.println(key+" --> "value);
        }

        sehr viel einfacher als das rumhantieren mit Array und Liste - oder? ;)

        liebe Grüße aus Berlin
        lina-

        PS: keine Garantie auf 100% korrekte Syntax... hab ich nur ausm Kopf zusammengezimmert.

        --
        Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
        1. sehr viel einfacher als das rumhantieren mit Array und Liste - oder? ;)

          liebe Grüße aus Berlin
          lina-

          Danke Lina,

          genau sowas hab ich gesucht. Hab mir auch schon gedacht ein Hashtable
          zu nutzen wusste nur nicht wie man an den Key als String kommt. Deine
          Idee war super und gefällte mir.

          Gruß Sep

          1. Deine Idee war super und gefällte mir.

            .oO(und wieso krieg ich dann kein "hilfreich"? Nie krieg ich ein "hilfreich"... menno)

            brummelige Grüße aus Berlin
            lina-

            --
            Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
            1. versteh jetzt nicht ganz was du meinst. hinter meiner aussage steckt
              doch die tatsache, dass du sehr hilfreich warst. ich dachte
              ich drücke es dadurch nur noch stärker aus als ein einfaches
              hilfreich.

              nochmals danke, warst sehr HILFREICH
              *wirr* sep

              1. moin sep :)

                versteh jetzt nicht ganz was du meinst. hinter meiner aussage steckt
                doch die tatsache, dass du sehr hilfreich warst. ich dachte
                ich drücke es dadurch nur noch stärker aus als ein einfaches
                hilfreich.

                nochmals danke, warst sehr HILFREICH
                *wirr* sep

                *g* weiss ich doch.. hatte wohl den smily vergessen ;)
                Irgendwie isses so, dass ich ab und an gute Hinweise gebe aber nie klickt einer auf "hilfreich" - da fängt man irgendwann an, sich zu wundern *g* und gerade heute wo sowieso "lina- wundert sich tag" ist.

                liebe Grüße aus Berlin
                lina-

                --
                Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
                1. klickt einer auf "hilfreich" -

                  Wo kann man denn hier auf "Hilfreich" klicken? Ich glaub ich bin blind.

                  1. moin Sep :)

                    Wo kann man denn hier auf "Hilfreich" klicken? Ich glaub ich bin blind.

                    hmmm? achso.. ich vergaß: wenn man nicht registriert ist, kann man keine Bewertung vornehmen.
                    Ich nehme alles zurück, behaupte das Gegenteil und stelle mich in die Ecke um mich zu schämen ;)

                    .oo(und wer hat da jetzt auf "hilfreich" geklickt? Ohweia... nich dass jetzt alle glauben ich wars selber *bibber*)

                    liebe Grüße aus Berlin
                    lina-

                    --
                    Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
                    1. Dann muss ich mich wohl mal registrieren!?
                      Aber dann unter dem Realname damit ich das nachholen kann.

                      gruß fabian ;)

      2. Hallo,

        Leider wird mir auch so nur zweimal "id" und "name" ausgegeben.

        Äh, ja, klar. Das hab ich übersehen:

        data[0] = "class";
        data[1] = "main";
        list.add( data );

        »»

        data[0] = "id";
        data[1] = "Hauptfeld";
        list.add( data );

        Du legst zweimal _dasselbe_ Array in der 'list' ab. Arrays sind in Java
        Objekte und werden daher wie jedes andere Objekt auch als Referenz
        übergeben. D.h. daß die add-Methode in beiden Fällen eine Referenz auf
        dasselbe Array übergeben bekommt. Nur die Referenz wird in der 'list'
        abgelegt, nicht aber die konkreten Werte.

        Wenn du jetzt also über list.get(int) (bzw. eben der Iterator) den
        Wert wieder versuchst aus der 'list' rauszuholen, wird dir nur wieder
        eine Referenz auf das Array zurückgeliefert. In dem Array stehen die
        Werte drin, die du zuletzt hineingeschrieben hast. In deinem Fall ist
        dies "id" und "Hauptfeld".

        Du hättest nach deinem zweiten "list.add(data)"-Aufruf auch nochmal
        z.B. date[0] = "lirumlarum" schreiben können. Dann wäre die Ausgabe
        eben "liarumlarum Hauptfeld".

        Wenn dir das nicht klar ist/wurde, solltest du dich dringend mit
        Referenzen beschäftigen. Anders wirst du mit Java nicht glücklich
        werden...

        Gruß
        Slyh

    3. Irgendwie erscheint mir eine Hashtable möglicherweise sinniger.

      Eine Hashtable würde ich heute nicht mehr verwenden. Ist außerdem komplett synchronized, wenn mich recht entsinne.

      1. Hallo,

        Irgendwie erscheint mir eine Hashtable möglicherweise sinniger.
        Eine Hashtable würde ich heute nicht mehr verwenden. Ist außerdem komplett synchronized, wenn mich recht entsinne.

        Kommt drauf an, was man macht. Wenn man was sychronisiertes braucht,
        nimmt man besser eine Hashtable. Wieso sollte man sie "heute" nicht
        mehr verwenden?

        Im konkreten Beispiel ist vielleicht eine HashMap besser. (Ich dachte,
        ich hätte "erscheint mir eine Hastable _oder etwas ähnliches_
        möglicherweise sinniger" geschrieben. Hab ich wohl nicht. Oder war das
        in einem anderen Posting? Naja, sei's drum...)

        Gruß
        Slyh

      2. moin :)

        Irgendwie erscheint mir eine Hashtable möglicherweise sinniger.
        Eine Hashtable würde ich heute nicht mehr verwenden. Ist außerdem komplett synchronized, wenn mich recht entsinne.

        Wieso denn das bitte? Für das Beispiel ist ein Hashtable genau das richtige. So wars gestern und heute wirds nicht anders sein.

        liebe Grüße aus Berlin
        lina-

        --
        Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)