Liste mit int und String (assoziativ glaub ich)

Status
Nicht offen für weitere Antworten.

Incubant

Mitglied
Hallo,

ich kann es einfach nicht glauben, ich füllte mich mal Java gewachsen, aber es wirft mir immer bei den kleinsten Aufgaben riesige Brocken vor die Füße. Meine einzige Erkenntnis ist, dass ich halt doch noch der blutigste Anfänger bin.

Ich quäl auch ordentlich Bücher, Foren und google, aber irgendwie wollen sich meine Probleme nicht lösen.

:?: Folgendes, ich will ganz ganz einfach eine Liste haben, die einen int und einen dazu gehörigen String speichert, aber nicht geregelt abläuft.

Also sprich 1. Eintrag 103 --> Artikelname
2. Eintrag 205 --> Artikelnummer
u.s.w.

ursprünglich hatte ich es mit einer HashMap geschrieben, aber schieß ich da nicht mit Kannonen auf Spatzen? Den ich will ja nur int --> String.

Die meisten Listen die ich durchlese arbeiten mit Objekts, aber soweit ich weiß ist int primitiv und kein Objekt.

Die Liste sollte nur 3 Funktionen können

Code:
    parameter.add(103, "Artikelname");
    paramter.getValue("Artikelname");    //gibt int 103 zurück    
    parameter.getKey(103);                   // gibt String "Artikelname" zurück


wie verwirkliche ich dieses einfach Gebilde.

Vielen Dank.

Ich glaub ohne Euch und Java-Forum.org, könnte ich meine DA in die Ecke werfen.
 
die HashMap ist genau das was du brauchst,
sie kann von einem Objekt (z.B. 103) auf ein anderes wie den String mappen,

das ist keine Kanone und auch kein Spatz, sondern genau der richtige Einsatz 😉

allerdings funktioniert eine Map immer nur in eine Richtung,
wenn du auch vom String auf den Key schließen möchtest,
brauchst du eine zweite Map,
bei der der String der Key ist und der Key der Value,

pass aber auf, dass jeder String eindeutig ist,
ansonsten vielleicht von String auf eine Liste von Keys mappen
 
danke Slater

aber was mich an der HashMap nervt, ist das Objekt, weil ich dann mit Integer anstatt int's arbeiten müsste.

Also ich für meinen Fall arbeite in meinem ganzen Programm eigentlich nur mit int, übergeb auch int's u.s.w.

Und jetzt muss ich so eine Integer typ-wandlung machen! Ist das notwendig.

:?: Wie ist das eigentlich bei Java, wär ich besser dran wenn ich nur mit Integer arbeiten würde oder nur mit int,
Oder am besten mal so mal so. :?: :?

Ich versteh unter int und Integer genau das selbe nur mit einem anderen Namen und das eine ist eben ein Objekt und das andere nicht.

Und bei der HashMap ist das nächste Problem, dass ich nicht vorwärts und rückwärts arbeiten kann.

Das kann ich nicht verstehen, gibt es solche arten und zugriffe auf listen nicht öfter, dass sowas nicht implementiert ist? Oder ist das einfach normal, dass man zwei listen macht. Ich hab halt immer die übersichtlichkeit meines Programms im Hinterkopf, und doppelt gemoppelt find ich nicht arg übersichtlich.

Gruß Basti
 
int ein besonderer Datentyp,
eine HashMap die nur mit ints arbeitet wäre sogar einen Tick effizienter,
denn dann braucht man keine oder eine deutlich einfachere HashCode-Operation,

allerdings würde diese Map dann nicht mit allen andere Objekten der Java-Welt funktionieren,
also gibt es die Objekt-Map, die überall geht und auch mit ints mit unerheblichen Zusatzaufwand,

für spezielle int-Nutzung lohnt es sich, eine eigene Map zu schreiben,
bzw. du brauchst sicherlich gar nicht mal eine Map,
wenn du nur wenige Objekte hast und es dir mehr um die Organisation als um die Performanz geht,
dann kannst du auch eine Liste oder bei Array nehmen, welches bei jeder Suche durchlaufen wird

--------

eine HashMap kann von Natur aus nur in eine Richtung,
in jedem Programm und jeder Programmiersprache der Welt,

natürlich kann man sich eine höhere eigene Klasse schreiben,
die beide Richtungen beherrscht und intern zwei Maps (oder in deinem Fall auch einfachere Listen/ Arrays) verwendet,

ich sehe nichts, was dagegen spricht, sowas allgemein in der Java-API anzubieten,
da stimme ich dir zu,
habe ich bisher aber noch nirgendwo gesehen
 
Es würde hier um wenige Elemente gehen, sprich ca. 100, mit einer Liste hab ichs probiert, aber irgendwie kam ich auch nicht zum gewünschten Erfolg. In meinem Fall weiß ich auch nicht 100% welche Liste da angebracht wäre.

Und um ein Arrays mach ich eigentlich eher einen Bogen und speziell auch in diesem Fall.

Ich denk ich werd auf die zwei Hashmaps zugreifen und die Integer eingabe. Ist zwar nicht soo schick aber erfüllt seinen zweck.

Als ich mit Java angefangen hab, dacht ich, das erschlägt alles auf die leichteste Art und weiße, aber irgendwie kommts mir im Moment anderst vor.
 
die Liste müsste natürlich beide Elemente enthalten,
entweder in einer eigenen Hilfsklasse, was immer zu empfehlen ist,
oder wiederum in einer Liste/ Array,
also eine Liste von 100 Listen mit je zwei Elementen,

bei Key-Eingabe dann die Liste durchlaufen, jeweils das Key-Element anschauen und bei Treffen das andere Element zurückgeben,
HashMap kommt dem recht nahe, und ist in der Suche natürlich schneller
 
Ich hab jetzt ne HashMap verwendet und eine rückwärtssuche anhand von iteratoren gebaut. Ein bisschen wirr, aber die Rückwärtssuche sollte sowiese nicht so oft benutzt werden. Und das wichtigste, es funktioniert 😀

Code:
  HashMap parameters = new HashMap();

  parameters.put("Artikelname", new Integer(102));
  //.... viele weitere parameter

  public Integer getID(String keyName) {
    return (Integer)parameters.get(keyName);
  }
  
  public String getName(int keyNumber) {
    Iterator it = parameters.entrySet().iterator();
    while (it.hasNext()) {
      Map.Entry entry = (Map.Entry) it.next();
      if (entry.getValue().hashCode() == keyNumber){
        return entry.getKey().toString();
      }
    }
    return "undefined";
  }

Vielen Dank SalterB für deine Unterstützung und Erläuterung.
 
Wenn du Java ab Version 1.5 nutzst brauchst du dich übrigens
um die Umwandlung int <==> Integer nicht zu kümmern

Code:
 HashMap parameters = new HashMap(); 

  parameters.put("Artikelname", 102); 
  //.... viele weitere parameter 

  public int getID(String keyName) { 
    return parameters.get(keyName); 
  } 
  
  public String getName(int keyNumber) { 
    Iterator it = parameters.entrySet().iterator(); 
    while (it.hasNext()) { 
      Map.Entry entry = (Map.Entry) it.next(); 
      if (entry.getValue() == keyNumber){ 
        return entry.getKey().toString(); 
      } 
    } 
    return "undefined"; 
  }
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben