Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Funktioniert dies? Und gibt es eine bessere Lösung?
ich habe gerade eine Methode geschrieben, die das letzte Element aus einem String-Set löschen soll. Nun wollte ich fragen: Gibt es eine bessere Möglichkeit? Und vor allem, würde meine Lösung denn immer hinhauen? Ausprobiert habe ich es, doch ist es ganz sicher?
Code:
public Set<String> removeLast(Set<String> keys){
ArrayList<String> al= new ArrayList<String>();
for(String s : keys){
al.add(s);
}
al.remove(al.size() - 1);
keys.clear();
for(String s : al){
keys.add(s);
}
return keys;
}
die Größe size() von 0 haben, dann bekommst du eine NullPointerException.
Dies müsste also davor noch überprüft werden, ansonsten schlägt es fehl. Wobei man andererseits auch sagen kann, wenn eh nix drin ist, kann natürlich auch nichts gelöscht werden.
Führt dazu, dass du eine java.lang.ArrayIndexOutOfBoundsException: -1 bekommen kannst, wenn size == 0 ist.
Außerdem sollte dir bewusst sein, dass Set nicht geordnet sein muss, also entfernst du da praktisch irgendein Element.
Daher ist auch eine removeLast Methode auf einem Set, welches keine explizite Ordnung angibt, in meinen Augen eher sinnlos.
Außerdem wundert es mich, dass du das Set zurückgibst, obwohl du doch das übergebene Set gleichzeitig veränderst.
Alternativ wäre sowas möglich:
Java:
public Set<String> removeItem(Set<String> keys)
{
List<String> list = new ArrayList<String>(keys);
if (list.size() > 0)
list.remove(0);
return new HashSet<String>(list);
}
Naja, ich geb halt das gleiche zurück, um die erstellung eines neuen Sets zu verhindern - Ändern tut es ja nicht. Aber ich hätte eine Frage: Wieso .remove(0) ? edit: habs verstanden ^^
Ein Set ist eine Implementierung des Konzepts einer Menge, und Mengen sind nicht geordnet. Mit anderen Worten ist rein theoretisch nicht einmal gewährleistet, dass dir die Elemente eines Sets immer in der gleichen Reihenfolge ausgegeben werden. Deswegen ist Set die falsche Abstraktionsebene für das, was du willst.
Es gibt ein Unter-Interface SortedSet für sortierte Mengen. Dort gibt es auch - oh Wunder - eine Methode [c]last()[/c], um das letzte Element zu ermitteln. Damit beschränkt sich dein Problem auf [c]set.remove(set.last());[/c]. [c]SortedSet[/c] wird von der Klasse [c]TreeSet[/c] implementiert.