Feeds de los foros

En la página principal de los foros encontrarás los enlaces al logo feed feed general y al de cada uno de los foros.

Subscribete para mantenerte informado de los cambios y responde a las dudas siempre que te sea posible

Buscar en el foro

Foro J2SE

feed Foro J2SE Foro: J2SE

Nuevo Tema Nuevo Tema

[consulta sobre código] alguien sabe por que me devuelve fal ... 29/09/2009 16:55
Caledor ¿Alguien sabe por qué si tengo la misma variable byte[] bytes declarada en el constructor y en el main con los mismos valores el resultado me devuelve un false?.
Os dejo el código fuente de lo que me refiero.

public class Basura {
    private ConcurrentHashMap<byte[], Boolean> objetivos = null;


    public Basura() {
        ; super();
        ; this.objetivos = new ConcurrentHashMap<byte[], Boolean>();
        ; byte[] bytes = {-87, -50, -45, -38, -43, 86, -127, 78, -44, 96, 66, -34, 105, 110, 24, 73}; //hash de aac
        ; putObjetivos(bytes);
    }

    private void putObjetivos(byte[] bytes) {
        ; if (bytes.length == 16) //16 tama?o para MD5
        ;     objetivos.put(bytes, false);
    }
    
    private boolean containKey(byte[] bytes) {
        ; return objetivos.containsKey(bytes);        ; 
    }
    
    private void mostrarContenidoObjetivos()
 {
        ; System.out.println("objetivos: ");
        ; Enumeration<byte[]> keys = objetivos.keys();
        ; while (keys.hasMoreElements()) {
        ;     byte[] bs = (byte[]) keys.nextElement();
        ;     for (byte b : bs) {
        ;         
System.out.print(+ " ");
        ;     }
        ;     System.out.println();
        ; }
    }

    public static void main(String[] args) {
        ; Basura b = new Basura();
        ; byte[] bytes ={-87, -50, -45, -38, -43, 86, -127, 78, -44, 96, 66, -34, 105, 110, 24, 73}; //hash de aac
        ; b.mostrarContenidoObjetivos();
        ; System.out.println(b.containKey(bytes));
    }
}
#unapprove_message#
RE: [consulta sobre código] alguien sabe por que me devuelve ... 29/09/2009 17:25
jcesarperez

Porque la implementación del método equals de un array sólo devuelve true si es el mismo objeto (ed. ref1==ref2). En tu caso son 2 objetos arrays, y aunque guarden los mismos valores, son distintos.

Creo que lo estas haciendo mal, porque estás creando un mapa que guarda un único elemento, cuya clave es todo el array. Imagino que lo q quieres es tener un elemento por cada valor del array de claves. Imagino...

#unapprove_message#
RE: [consulta sobre código] alguien sabe por que me devuelve ... 30/09/2009 00:41
Caledor

Entonces tengo que sobreescribir los metodos ¿equals y hashCode? bufff ¡que rollo!.

 No lo estoy haciendo mal lo que quiero guardar son un montón de arrays de manera única y que sean Thread Safe el código de aquí lo he escrito para ver por qué fallaba en mi aplicación real por eso la clase se llama Basura ;) no es muy original pero...

#unapprove_message#
RE: [consulta sobre código] alguien sabe por que me devuelve ... 30/09/2009 01:21
Caledor pues no funciona sobreescribir el método equals (ya me he asegurado de que cumpla la reflexión, simetría, transitividad, nulidad y consistencia) pero creo que ni ConcurrentHashMap ni AbstractMap hacen uso de equals ni hashcode
#unapprove_message#
RE: [consulta sobre código] alguien sabe por que me devuelve ... 30/09/2009 07:57
anonymous

Guenas.

Los arrays se comparan siempre por referencia. Tendras que crearte una clase envoltorio de tus arrays byte[] para gestionar la igualdad entre arrays por su contenido.

Pienso que todo te resultara mas facil si conviertes a String cada byte[]. Cuando lo requieras puedes volver a crear el array de bytes a partir del String guardado.

Salut,

    Paposo

 

#unapprove_message#
RE: [consulta sobre código] alguien sabe por que me devuelve ... 30/09/2009 17:17
anonymous Esta muy bien, lo unico que no encuentro es donde retornas el TRUE, ya que por defecto si no me equivoco el valor es FALSE
#unapprove_message#
RE: [consulta sobre código] alguien sabe por que me devuelve ... 03/10/2009 00:59
anonymous aasddddddddddddddddddddddd sad asd as
#unapprove_message#
#thread_expired#.
Sun Microsystem Logo NHT-Norwick Logo

© 2002-2007 Asociación javaHispano