Advertisement
Guest User

Untitled

a guest
Apr 22nd, 2019
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.34 KB | None | 0 0
  1. public class TabelaHash {
  2.  
  3. private Registro[] registros = new Registro[10];
  4.  
  5. public void put(Object chave, String valor) {
  6. int posicao = hash(chave);
  7.  
  8. //Se ainda não existem registros nesta linha do hash
  9. if (registros[posicao] == null) {
  10. registros[posicao] = novoRegistro(chave, valor);
  11.  
  12. //Se se já houver registros nesta linha do hash
  13. } else {
  14. //Pega o primeiro registro da linha
  15. Registro atual = registros[posicao];
  16.  
  17. //Caminha até o último registro
  18. while (atual.getProximo() != null) {
  19.  
  20. //Se achar a mesma chave "no meio do caminho",
  21. //troca o valor e acaba o método
  22. if (atual.getChave().equals(chave)) {
  23. atual.setValor(valor);
  24. return;
  25. }
  26.  
  27. atual = atual.getProximo();
  28. }
  29.  
  30. //Se achar a mesma chave "no final do caminho",
  31. //troca o valor e acaba o método
  32. if (atual.getChave().equals(chave)) {
  33. atual.setValor(valor);
  34. return;
  35. }
  36.  
  37. //Se chegar no final da lista desta linha, adiciona um
  38. //novo registro com a chave, o valor, e colocando o próximo como nulo
  39. atual.setProximo(novoRegistro(chave, valor));
  40. }
  41.  
  42.  
  43. }
  44.  
  45. protected Registro novoRegistro(Object chave, String valor) {
  46. Registro novoRegistro = new Registro();
  47. novoRegistro.setChave(chave);
  48. novoRegistro.setValor(valor);
  49. novoRegistro.setProximo(null);
  50. return novoRegistro;
  51. }
  52.  
  53. private int hash(Object chave) {
  54. return chave.hashCode() % 10;
  55. }
  56.  
  57. public String get(Object chave) {
  58. //Mapeia a chave para uma posição de linha (no hash)
  59. int posicao = hash(chave);
  60. Registro atual = registros[posicao];
  61.  
  62. //A linha da chave procurada está nula
  63. if (atual == null) {
  64. throw new RuntimeException("Chave desconhecida: " + chave);
  65. }
  66.  
  67. //Caminha na linha, procurando a chave
  68. while (!atual.getChave().equals(chave)) {
  69.  
  70. //Se chegar no final da linha, não encontrou a chave
  71. if (atual.getProximo() == null) {
  72. throw new RuntimeException("Chave desconhecida: " + chave);
  73. }
  74. atual = atual.getProximo();
  75. }
  76.  
  77. return atual.getValor();
  78. }
  79.  
  80. }
  81.  
  82. class Registro {
  83.  
  84. private Object chave;
  85. private String valor;
  86. private Registro proximo;
  87.  
  88. public Object getChave() {
  89. return chave;
  90. }
  91.  
  92. public void setChave(Object chave) {
  93. this.chave = chave;
  94. }
  95.  
  96. public String getValor() {
  97. return valor;
  98. }
  99.  
  100. public void setValor(String valor) {
  101. this.valor = valor;
  102. }
  103.  
  104. public Registro getProximo() {
  105. return proximo;
  106. }
  107.  
  108. public void setProximo(Registro proximo) {
  109. this.proximo = proximo;
  110. }
  111.  
  112. @Override
  113. public int hashCode() {
  114. final int prime = 31;
  115. int result = 1;
  116. result = prime * result + ((chave == null) ? 0 : chave.hashCode());
  117. result = prime * result + ((proximo == null) ? 0 : proximo.hashCode());
  118. result = prime * result + ((valor == null) ? 0 : valor.hashCode());
  119. return result;
  120. }
  121.  
  122. @Override
  123. public boolean equals(Object obj) {
  124. if (this == obj)
  125. return true;
  126. if (obj == null)
  127. return false;
  128. if (getClass() != obj.getClass())
  129. return false;
  130. Registro other = (Registro) obj;
  131. if (chave == null) {
  132. if (other.chave != null)
  133. return false;
  134. } else if (!chave.equals(other.chave))
  135. return false;
  136. if (proximo == null) {
  137. if (other.proximo != null)
  138. return false;
  139. } else if (!proximo.equals(other.proximo))
  140. return false;
  141. if (valor == null) {
  142. if (other.valor != null)
  143. return false;
  144. } else if (!valor.equals(other.valor))
  145. return false;
  146. return true;
  147. }
  148.  
  149.  
  150.  
  151. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement