¿Hay alguna manera de ver realmente el código fuente de las clases estándar de Java por cierto? Estoy creando una tabla hash de puntos (HashSet<Point>
) y quiero asegurarme de que funcionará bien, pero no puedo ver cómo se ve en realidad el método hashCode() de Point, así que no sé qué tan bueno es realmente es. ¿Alguien puede ayudarme? ¿Debo anularlo? Y si es así, ¿hay una manera fácil de hacerlo sin crear un archivo/clase java completamente nuevo?Java - ¿El método hashCode() de la clase Point es bueno, o debería anularlo y escribir el mío?
Respuesta
Si está buscando hashCode()
de java.awt.Point
, se define en java.awt.geom.Point2D
.
/**
* Returns the hashcode for this <code>Point2D</code>.
* @return a hash code for this <code>Point2D</code>.
*/
public int hashCode() {
long bits = java.lang.Double.doubleToLongBits(getX());
bits ^= java.lang.Double.doubleToLongBits(getY()) * 31;
return (((int) bits)^((int) (bits >> 32)));
}
Tenga en cuenta que la cuestión "Va a desmenuzar bien?" es difícil de responder, depende principalmente del patrón de uso.
Se puede acceder al código fuente de casi todos los "clases Java estándar", simplemente buscar el archivo src.zip
en el directorio de instalación del JDK (o utilizar un IDE como Eclipse/NetBeans y haga clic en F3 en el nombre de la clase).
Por cierto, esto no es una mala implementación del código hash, como va. No es lo que yo llamaría seguro contra un ataque deliberado, pero es perfectamente bueno para el uso diario. –
¡¡¡Gracias !!!!!!!!! – Tim
@Louis Wasserman: Ten en cuenta que no dije que era malo, me refería a la pregunta de Tim: "Quiero asegurarme de que funcionará bien" _. Creo que uno no debe tocar el comportamiento predefinido, en general deberían serlo. En mi experiencia, después del perfilado siempre se reduce a alguna otra parte del código que causa el cuello de botella. – rlegendi
¿Hay alguna manera de ver realmente el código fuente de las clases estándar de Java por cierto?
Sí - Creo que generalmente viene con el JDK, en un archivo src.zip dentro de su directorio JDK. Si no es así, la forma de obtenerlo dependerá de la versión de Java que esté utilizando. La fuente completa JDK 6 está disponible here por ejemplo, o JDK 7 tiene un source code download page por separado con varias opciones.
En cuanto a qué tan bueno es el hash, ¿por qué no probarlo con una muestra de su puntos reales? Siempre habrá la posibilidad de colisiones, pero si realmente ocurren o no dependerá de sus datos. Una manera fácil de averiguar qué tan libre de colisiones tiene el hash en su caso es usar Multiset desde Guava - agregue el código hash de cada punto al conjunto, y luego eso básicamente le dará la frecuencia de cada código hash.
Para ser honesto, me gustaría esperar que el algoritmo hash sea bastante razonable para uso general. Pero las pruebas siempre son una buena idea si estás preocupado.
El código fuente de Java viene con el JDK en el archivo src.zip
. Tenga en cuenta que Point
's hashCode()
se define en su principal, java.awt.geom.Point2D
.
Si se decide la implementación existente no es hasta sus estándares, es posible que prefiera reemplazar el método hashCode
usando una clase anónima, que se define "sobre la marcha":
Point myPoint = new Point() {
public int hashCode() {
// custom implementation
}
}; // <-- note required semicolon
De esta manera usted ganó' t tiene que crear un nuevo archivo.
- 1. Java o cualquier otro idioma: ¿Qué método/clase invocó el mío?
- 2. ¿Cómo funciona el método hashCode() de java?
- 3. Java hashCode para una clase de punto
- 4. Creando un método hashCode() - Java
- 5. ¿Por qué debería anular hashCode() cuando anulo el método equals()?
- 6. ¿Por qué no es bueno escribir en el campo estático del método de instancia en Java?
- 7. Perfiles de ASP.net y membresía - ¿Proveedores personalizados o debería completar por completo el mío?
- 8. WPF: ¿Por qué debería usar un marco de MVVM existente en lugar de escribir el mío?
- 9. Java - TreeSet y hashCode()
- 10. Herencia y casting: ¿esto es bueno java?
- 11. Cómo implementar hashCode y equivale al método
- 12. ¿Es posible escribir el método de intercambio en Java?
- 13. ¿Cuál es la diferencia entre `##` y `hashCode`?
- 14. ¿Cómo funciona sizeof? ¿Cómo puedo escribir el mío?
- 15. obtener la clase y el método actuales?
- 16. Clases internas de Java (anónimas o no): ¿es bueno usarlas?
- 17. Java: Equals() automático y hashCode()
- 18. ¿Qué tan bueno es el método Rails sanitize()?
- 19. ¿Cuál es el error de Point of (NSError **)?
- 20. clase o método de alias en java
- 21. Debería establecer el delegado a cero en la clase usando el delegado o en la clase
- 22. Sobrecarga del método: ¿diseño bueno o malo?
- 23. ¿Cómo extiendo correctamente la clase AS3 Point?
- 24. ¿Debería considerarse el campo id de una entidad JPA en equals y hashCode?
- 25. ¿Cómo escribir el método de descripción adecuado para una clase?
- 26. contrato equals() y hashCode() en Java
- 27. C#, ¿Escribir método más largo o método más corto?
- 28. ¿Es bueno o malo envolverse en el constructor?
- 29. ¿Cuándo debería usar el elenco de clase del método java 5?
- 30. ¿Cómo es que la clase Integer de Java no tiene el método compare()?
No sé acerca de otros IDEs, pero en Eclipse puede adjuntar el código fuente a la biblioteca de Java. Ventana -> Preferencias -> Java -> JRE instalados -> Seleccione los JAR -> Archivo adjunto de origen. Navega hacia el src.zip que obtiene con su JDK (o siguiendo el enlace de Jon Skeet) y voilà. – Jeffrey
La fuente se encuentra en 'src.zip' dentro de su directorio JDK. –
También puede buscar en google> java awt point source y el primer resultado de búsqueda probablemente sea el código fuente completo de la clase :-) – Yuval