RSS

Lista de valores no repetidos con Java

24 Ago

OBJETIVO:

Tenía como 4000 valores, había una cierta cantidad no repetidos por ejemplo 25, todos los demás valores eran alguno de esos 25. Lo que quería era generar solo una lista con los valores no repetidos.

Para hacer esto es muy útil las clases que implementan a la interfaz Set, yo utilice la de TreeSet que además de las ventajas de ser un Set implementa otras funciones que por el momento no me interesan.

Este es el método que utilice, lo que hace es que se va leyendo línea por línea y preguntamos si la cadena que se esta leyendo ya esta contenida en el set, si no es así la agregamos y hacemos lo que tenemos que hacer, en otro caso seguimos con la línea siguiente.

StringBuilder sb = new StringBuilder();
Set<String> listaNoRepetidos = new TreeSet();
while ((linea = buffReader.readLine()) != null) {
  // obtiene la 4a palabra
  String nombreMetodo = linea.split(SEPARADOR)[3];
  if (!listaNoRepetidos.contains(nombreMetodo)) {
   listaNoRepetidos.add(nombreMetodo);
   // se pone lo que se deba hacer
   sb.append("*").append(nombreMetodo).append("\n");
  }
}

ACTUALIZACIÓN: Gracias a “ignorante” que hizo notar que el método add, regresa true si agrega el elemento al set,
si ya existe regresa false, así que no es necesario primero preguntar si está y luego agregarlo. Por lo que
el código quedaría así de mejor manera:

StringBuilder sb = new StringBuilder();
Set<String> listaNoRepetidos = new TreeSet();
while ((linea = buffReader.readLine()) != null) {
  // obtiene la 4a palabra
  String nombreMetodo = linea.split(SEPARADOR)[3];
  if (listaNoRepetidos.add(nombreMetodo)) {
   // se pone lo que se deba hacer
   sb.append("*").append(nombreMetodo).append("\n");
  }
}

NOTA: Lo primero de JAVA que escribo en el blog, aunque tengo ya muchas cosas que debería poner… pero cuando se ocupen de nuevo lo tendré que poner =P

La información la saqué de estas páginas:

http://www.reloco.com.ar/prog/java/collections.html

http://download.oracle.com/javase/6/docs/api/index.html?java/util/Set.html

 
3 comentarios

Publicado por en 24 agosto, 2011 en Código, Java

 

3 Respuestas a “Lista de valores no repetidos con Java

  1. ignorante

    30 agosto, 2011 at 14:18

    No tiene sentido preguntar si lo contiene y luego agregarlo.

    StringBuilder sb = new StringBuilder();
    Set listaNoRepetidos = new TreeSet();
    while ((linea = buffReader.readLine()) != null) {
    // obtiene la 4a palabra
    String nombreMetodo = linea.split(SEPARADOR)[3];
    if(listaNoRepetidos.add(nombreMetodo)){
    // se pone lo que se deba hacer
    sb.append(“*”).append(nombreMetodo).append(“\n”);
    }
    }

     
    • pensaderoisma

      30 agosto, 2011 at 17:38

      2 cosas, primero y más importante, trabaja mejor tu código. Gracias por mejorarlo, y hacer ver que de la forma en que lo había puesto se hace una llamada a un método
      que no es necesario. El código que propones está mejor.

      Otra cosa, si tiene sentido el código que puse, tanto que funciona, tal vez no de la mejor manera pero funciona, así que tiene mucho sentido.

      Por lo tanto actualizaré el post y señalaré que no es necesario hacer dos llamadas.
      Gracias de nuevo por el apunte !!

       
  2. ignorante

    30 agosto, 2011 at 19:22

    Es verdad. Sentido tiene. Quise decir que era innecesario preguntar y agregar.

     

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: