# ArrayList mit int-Werten sortieren



## lolo (11. Mai 2005)

Hallo,

ich habe eine dynamische ArrayList mit int-Werten. Die int Werte möchte ich nachdem ich die ArrayList gefüllt habe, ordnen. Auf- oder absteigen, egal. Welcher Algorithmus ist am einfachsten zu implementieren? Die int Werte sind eigentlich Strings. Kann man die trotzdem so behandeln, als ob es Zahlen sind? :idea:

Lo.


----------



## mic_checker (11. Mai 2005)

Füg die Zahlen der ArrayList hinzu und du kannst sie ja mit Collections.sort(deineListe) sortieren....


----------



## lolo (11. Mai 2005)

mic_checker hat gesagt.:
			
		

> Füg die Zahlen der ArrayList hinzu und du kannst sie ja mit Collections.sort(deineListe) sortieren....



Hab ich probiert, ordnet aber nicht richtig. Es sind auch negative "strings" in der ArrayList. Gibts andere Möglichkeiten?


----------



## Illuvatar (11. Mai 2005)

Hast du Integers oder Strings? Wenn Strings, dann parse die mal in Integers die du in die Liste tust.


----------



## mic_checker (11. Mai 2005)

Zeig mal deinen Code den du verwendest.


----------



## lolo (11. Mai 2005)

mic_checker hat gesagt.:
			
		

> Zeig mal deinen Code den du verwendest.




```
...
                        SwingUtilities.invokeAndWait(readThread);
				textb.setText(val);
				
				System.out.println("ReadThread reads " + val);
				Thread.yield();
				
				Object o = new Object();
				o = val;
				while(Thread.currentThread().isAlive())
				{
					// no values twice 
					if(!collection.contains(o))
					{
						// and no string values
						if(!o.equals("test data ..."))
						{
							// now add values
							collection.add( o );
							break;
						}
					}
					break;
				}
				System.out.println(collection.toString());
			}
			catch( Exception e )
			{
				System.err.println("Thread was interrupted!" + e);
			}
```

und dann sortieren:


```
public void sortArray()
	{
		Collections.sort(collection);
		System.out.println("Ordered values " + collection);
         }
```


----------



## mic_checker (11. Mai 2005)

Wo wird deine Methode sortArray() überhaupt aufgerufen?


----------



## lolo (12. Mai 2005)

mic_checker hat gesagt.:
			
		

> Wo wird deine Methode sortArray() überhaupt aufgerufen?



die wird an einer anderen stelle des programms aufgerufen. wenn man auf einen button klickt. dann stopt die aufzeichnung der values und die arraylist soll geordnet werden.


----------



## Zilchinger (12. Mai 2005)

Das Problem werden die Strings sein, da die nach lexikografischer Ordnung sortiert werden. Sprich wenn du hier mit dem Vorzeichen - arbeites kommt alles durcheinander.
Ich würde die Values auch in ein Interger ändern, dann gibt es die Probleme nicht.
Da du eine ArrayList verwendest, glaube ich kann man dort nur Objekte speichern, also nimmst du für die Werte die Wrapperklasse Integer.

Beispiel:

```
String myString = "5";
Integer myInt = new Integer(myString);

//Zugriff auf den Grunddatentyp int:
int zahl = myInt.intValue();
```

Sollte das Sortieren immer noch nicht klappen, würde ich mir schnell selbst was basteln, da gibt es ja jede Menge Algorithmen im Netz:
Quicksort
BubbleSort
MergeSort
HeapSort
....

Bis denn,
Zilchinger


----------



## Sky (12. Mai 2005)

Zilchinger hat gesagt.:
			
		

> Das Problem werden die Strings sein, da die nach lexikografischer Ordnung sortiert werden. Sprich wenn du hier mit dem Vorzeichen - arbeites kommt alles durcheinander.



Die Methode 'sort' kann aber auch mit einem eigenem "Comparator" aufgerufen werden. Wenn Du Dir also einen eigenen "Comparator" schreibst, so werden die Werte nach deinen Wünschen sortiert.


----------



## mic_checker (12. Mai 2005)

lolo: Kontrollier mal ob die Methode korrekt aufgerufen wird. Ansonsten steckst du halt Integers rein und gut is....


----------



## Guest (12. Mai 2005)

Erst mal vielen Dank für eure Tipps. Hat mir schon sehr geholfen. Das Sortieren funzt nun auch korrekt. Ich habe einfach int's draus gemacht. Ein paar Fragen bleiben dennoch:

1. Codezeile 4 arbeitet nun nicht mehr ganz korrekt. ich wollte halt doppelte werte ausschliessen. funzt contains() nicht mit ints? wie kann ich das umgehen?


```
while(Thread.currentThread().isAlive())
            {
               // no values twice
               if(!collection.contains(o))
               {
                  // and no string values
                  if(!o.equals("test data ..."))
                  {
                     // now add values
                     collection.add( o );
                     break;
                  }
               }
               break;
            }
            System.out.println(collection.toString());
```

2. Wie kann ich auf das letzte Element in der ArrayList zugreifen? Das ist ja das größte Element nach dem ordnen. Welche Möglichkeiten gibts da?


----------



## mic_checker (12. Mai 2005)

Schau dir mal get(int index) an, dann musst du nur gucken wie groß die Liste ist und du hast es (fast) schon =)


----------



## lolo (13. Mai 2005)

kann mir noch jemand sagen wie ich doppelte werte ausschliessen kann? die zeile 4 oben im code funzt nicht mehr ordnungsgemäss.


----------



## mic_checker (13. Mai 2005)

Du steckst Integer rein - dann solltest du mit contains auch kontrollieren können ob der Wert schon enthalten ist. Bei mir klappt das so.


----------

