Advertisement
Guest User

Untitled

a guest
May 24th, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.93 KB | None | 0 0
  1. package aufgabe_3;
  2.  
  3. import java.util.Arrays;
  4.  
  5. public class CoalescedHashTable {
  6.  
  7. int[] ht; // eigentliche Hashtabelle
  8. int[] next; // Extrabereich zur Verkettung der Überläufer
  9. int n; // Anzahl der Datensätze in der Hashtabelle
  10.  
  11. public CoalescedHashTable(int size) {
  12. if (size < 1) {
  13. System.err.println("Warning: The size of the hash table has to be greater than zero. Creating new hash table "
  14. + "with the default size of 10.");
  15. size = 10;
  16. }
  17.  
  18. n = 0;
  19.  
  20. ht = new int[size];
  21. next = new int[size];
  22.  
  23. for (int i = 0; i < size; i++) {
  24. ht[i] = -1;
  25. next[i] = -1;
  26. }
  27. }
  28.  
  29. /**
  30. * Diese Methode liefert den Hash-Wert für einen gegebenen Key.
  31. *
  32. * @param key
  33. * Der Key, für den der Hash-Wert berechnet werden soll.
  34. * @return
  35. * Der Hash-Wert.
  36. */
  37. private int hash(int key) {
  38. return key % ht.length;
  39. }
  40.  
  41. /**
  42. * Methode zum Einfügen in die Hash-Tabelle.
  43. *
  44. * @param entry
  45. * Der Wert, der in die Tabelle eingefügt werden soll.
  46. * @return
  47. * <b>true</b>, wenn alles geklappt hat<br><b>false</b>, wenn die Tabelle voll ist
  48. */
  49. public boolean insert(int entry) {
  50.  
  51. // TODO implementieren Sie hier die Methode und passen Sie den Rückgabewert an
  52. if (entry < 0) {
  53. throw new IllegalArgumentException("Must be a positive Integer!");
  54. }
  55.  
  56.  
  57. int position = 0;
  58.  
  59. position = hash(entry); // is position for insertion
  60.  
  61. if (member(entry) == entry) {
  62. return false;
  63. }
  64.  
  65. if (ht[position] == -1) { //if position is empty //or ht[position] == entry?
  66.  
  67. ht[position] = entry; //insert entry into ht
  68. return true;
  69. }
  70. else if (ht[position] != -1){
  71. int index = ht.length - 1; // else if position is occupied (value != -1)
  72. while (index >= 0 && ht[index] != -1) {
  73. index--;
  74. }
  75. //Verkettung
  76. if (index > -1 && next[position] == -1) {
  77. next[position] = index;
  78. ht[index] = entry; //put entry into first empty bucket from the end
  79. return true;
  80. } else if (index > -1 && next[position] != -1) { //if next position already occupied put to next emtpy position (pointer in next)
  81. next[index] = index;
  82. ht[index] = entry;
  83. return true;
  84. } else
  85. {
  86. return false;//index ht is full
  87. }
  88. } else {
  89. return false;
  90. }
  91.  
  92.  
  93. }
  94.  
  95. /**
  96. * Methode zum Suchen in der Hash-Tabelle
  97. *
  98. * @param entry
  99. * Der Eintrag, der gesucht werden soll.
  100. * @return
  101. * Der Eintrag, wenn er in der Tabelle existiert, oder <b>-1</b>, wenn der Eintrag nicht existiert.
  102. */
  103. public int member(int entry) {
  104.  
  105. // TODO implementieren Sie hier die Methode und passen Sie den Rückgabewert an
  106.  
  107. // test if value already in data set
  108. for (int i = 0; i < ht.length; i++) {
  109. if (ht[i] == entry)
  110. return entry;
  111.  
  112. }
  113.  
  114. return -1;
  115.  
  116. }
  117.  
  118. @Override
  119. public String toString() {
  120. return "HashTable [ht=" + Arrays.toString(ht) + ", next=" + Arrays.toString(next) + "]";
  121. }
  122. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement