¿Cómo mantener un arraylist ordenado ?
Saludos a todos, soy nuevo en el sitio y estoy trabajando en una aplicación web de ajedrez para jugar humano-humano y quiero crear un ArrayList, con jugadores de ajedrez que se mantenga ordenado en la medida que inserto
, o cuando la partida termine que se ordene automaticamente por su Elo.
hasta ahora tengo esto.
public class Jugador implements Comparable
private String nombre =null;
private String pais = null;
private Integer elo=2000;
....
public void setElo(Integer elo) {
this.elo = elo;
}
public void setElo(String elo) {
this.elo = new Integer(elo);
}
public Integer getElo() {
return elo;
}
public int compareTo(Object o) {
Jugador jug = (Jugador)o;
return jug.getElo().compareTo(this.getElo());
}
para eso tengo otra clase
public class ListaUsuariosConectados {
public ArrayList lista = new ArrayList();
...
}
jugadoresEnLineas = new ListaUsuariosConectados();
esto es lo que hago actualmente, cada vez que me hacen una petición para ver los usuarios conectados y devolverlo ordenado por Elo.
Collections.sort(jugadoresEnLineas.lista);
pero me parece poco eficiente, teniendo en cuenta que al sitio se van a conectar muchos jugadores y se quiere dar los jugadores conectados ordenado por elo, y al finalizar cada partida cada jugador modifico su elo, además estas peticiones se hacen cada 10 segundo al servidor
la pregunta es
¿ Hay otra manera de mantener esa lista actualizada ?
La idea me viene de TurboPascal que tiene una clase llamada TsortedCollection que tiene esta funcionalidad. La lista siempre esta ordenada.
gracias
- Inicie sesión o regístrese para enviar comentarios
SortedSet
Podrías usar un SortedSet en vez de List, y así además no puede haber dos elementos iguales. Si usas HashSet debes implementar hash() en los objetos que metas al conjunto y si usas TreeSet me parece que con que implementen Comparable es suficiente (o creas el conjunto pasándole un Comparator).