Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.73 KB | None | 0 0
  1. public class DifferentHashCodeExample {
  2.  
  3. public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
  4.  
  5. //наша мапа
  6. Map<SomeClass, Object> map = new HashMap();
  7.  
  8. for (int i = 0; i < 17; i += 2) {
  9. SomeClass someClass = new SomeClass();
  10. someClass.setSomeField(i);
  11. map.put(someClass, i);
  12. }
  13.  
  14. //получаем и выводим кол-во бакетов в мапе, по умолчанию 16
  15. Field tableField = HashMap.class.getDeclaredField("table");
  16. tableField.setAccessible(true);
  17. Object[] table = (Object[]) tableField.get(map);
  18. System.out.println("Кол-во бакетов в мапе: " + (table == null ? 0 : table.length));
  19.  
  20. //выводим хэшкод и индекс всех ключей в мапе
  21. map.entrySet().forEach(a -> System.out.println("Hashcode: " + a.getKey().hashCode() +
  22. " Bucket index: " + SomeClass.indexFor(a.getKey().hashCode(), table.length)));
  23. }
  24.  
  25. }
  26.  
  27. class SomeClass {
  28. private int someField;
  29.  
  30.  
  31. //Алгоритм вычисления индекса бакета в хэштаблице
  32. static int indexFor(int h, int length) {
  33. return h & (length - 1);
  34. }
  35.  
  36. public void setSomeField(int someField) {
  37. this.someField = someField;
  38. }
  39.  
  40. @Override
  41. public boolean equals(Object o) {
  42. if (this == o) return true;
  43. if (!(o instanceof SomeClass)) return false;
  44. SomeClass someClass = (SomeClass) o;
  45. return someField == someClass.someField;
  46. }
  47.  
  48. @Override
  49. public int hashCode() {
  50. return Objects.hash(someField);
  51. }
  52. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement