Auf ein Element einer LinkedList (Collection) zugreifen.

AKST

Erfahrenes Mitglied
Hallo Leute,

ich füge in einer for-Schleife einer LinkedList mehrere Elemente zu. Wenn ich diese Liste nun durchlaufe, und mir die einzelnen Elemente anzeigen lasse, dann klappt alles wunderbar:
Jetzt möchte ich aber auf beim Duchlaufen dieser Liste eine Ausgabe in der Konsole haben, wenn ein bestimmtes Element erreicht ist:

Der Code sieht so aus:

Code:
import java.util.*;
public class ErsteSammlung {

	public static void main(String[] args) {
		Collection coll = new LinkedList();
		
		for (int i=0; i<10; i++)
			coll.add("Element "+i);
		
		Iterator it = coll.iterator();
		
		while(it.hasNext() ){
		  if (it.next().toString()=="Element 4")  //hier hakt es 
			System.out.println("Jetzt-Element 4");	
		  
		  System.out.println(it.next());
		}
			
	}
}

Wenn ich den obigen Code starte, dann habe ich folgende Ausgabe dich ich nicht nachvollziehen kann:
Element 1
Element 3
Element 5
Element 7
Element 9

Normalerweise gehen die Elemente von 1-9.
Wie kann ich denn nun darauf reagieren, wenn das "Element 4" dran ist?

Gruß
 
Juut,

die Ausgabe kommt deshalb zustande, da in der while Schleife zweimal zum nächsten Element gesprungen wird (1,3,5,7,9).
Eine Übereinstimmung bei element 4 findet er wohl nicht, weil die 4 kein String ist.
Wie kann ich eine Übereinstimmung mit diesem zusammengesetzten String erzeugen?

"element "+4 soll gleich "element 4" sein.
 
Zuletzt bearbeitet:
Moin,
Merksatz:

Stringvergleiche niemals mit == durchführen, sondern immer mit equals.

D.h. aus

if (it.next().toString()=="Element 4") //hier hakt es

muss

if (it.next().toString().equals("Element 4"))

werden.

String s1 = "1";
String s2 = "2";

if ( s1 == s2 )

wird niemals true ergeben, weil == auf Objektgleichheit prüft, also Objekt-ID, -Hashwert oder was weiss ich, aber eben nicht auf Objektinhalt.
Daraus folgt auch, dass eine solche Idee zum falschen bzw. nicht erwünschten Ergebnis führt:

Code:
public class Person
{
  private String m_strVorname;
  private String m_strNachname;
  
  Person(String vorname, String nachname)
  {
    m_strVorname  = vorname;
    m_strNachname = nachname;
  }
  
  public static void main(String[] args)
  {
    Person person1 = new Person("Hans", "Meiser");
    Person person2 = new Person("Hans", "Meiser");
    if ( person1 == person2 )
      System.out.println("Geht doch");
    else
      System.out.println("Geht wohl doch nicht");
  }
}
 
Ergänzung

FYI:

Code:
public class Person
{
  private String m_strVorname;
  private String m_strNachname;
  
  Person(String vorname, String nachname)
  {
    m_strVorname  = vorname;
    m_strNachname = nachname;
  }
  
  public static void main(String[] args)
  {
    Person person1 = new Person("Hans", "Meiser");
    Person person2 = new Person("Hans", "Meiser");
    
    if ( person1 == person2 )
      System.out.println("Geht doch mit ==");
    else
      System.out.println("Geht wohl doch nicht mit ==");
    
    if ( person1.equals(person2) )
      System.out.println("Geht doch mit equals()");
    else
      System.out.println("Geht wohl doch nicht mit equals()");
    
  }

  /* (non-Javadoc)
   * @see java.lang.Object#equals(java.lang.Object)
   */
  public boolean equals(Object arg0)
  {
    boolean bReturn = false;
    
    Person person = (Person)arg0;
    if ( this.getNachname().equals(person.getNachname())
        && this.getVorname().equals(person.getVorname()))
      bReturn = true;
    
    return bReturn;
  }
  /**
   * Returns the nachname
   *
   * @return the nachname.
   */
  public String getNachname()
  {
    return m_strNachname;
  }
  /**
   * Returns the vorname
   *
   * @return the vorname.
   */
  public String getVorname()
  {
    return m_strVorname;
  }
}
 
Moin,

danke Dir, hatte vorher schon mit equals "rumgespielt", hatte aber nicht geklappt.
Es kann aber daran liegen, dass in der while-Schliefe zweimal ein next ausgeführt wurde so das garnicht auf "Element 4" geprüft wurde.


Nun gehts :)
Für Interessierte Leser:
;-)

Code:
import java.util.*;
public class ErsteSammlung {

	public static void main(String[] args) {
		Collection coll = new LinkedList();
		
		for (int i=0; i<10; i++)
			coll.add("Element "+i);
		
		Iterator it = coll.iterator();
		
		while(it.hasNext() ){
		  if (it.next().toString().equals("Element 4"))
			System.out.println("Jetzt-Element 4");	
		  
		}		
	}
}
 
Zuletzt bearbeitet:
Zurück