# Auf ein Element einer LinkedList (Collection) zugreifen.



## AKST (12. Juli 2004)

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:


```
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ß


----------



## AKST (12. Juli 2004)

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.


----------



## Snape (13. Juli 2004)

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:


```
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");
  }
}
```


----------



## Snape (13. Juli 2004)

*Ergänzung*

FYI:


```
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;
  }
}
```


----------



## AKST (13. Juli 2004)

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:
;-)


```
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");	
		  
		}		
	}
}
```


----------

