Advertisement
Guest User

Untitled

a guest
Mar 30th, 2020
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.93 KB | None | 0 0
  1. import java.util.HashSet;
  2. import java.util.Iterator;
  3. import java.util.NoSuchElementException;
  4. import java.util.Set;
  5.  
  6. class DSAHashTable<K,V> {
  7.  
  8. private Set<Pair<K,V>>[] array;
  9. private int size = 0;
  10.  
  11. DSAHashTable(int size) {
  12. createArray(size);
  13. }
  14.  
  15. private void createArray(int size) {
  16. array = (Set<Pair<K,V>>[]) new Set<?>[size];
  17.  
  18. for(int i = 0; i < size; i++)
  19. array[i] = new HashSet<Pair<K, V>>();
  20. }
  21.  
  22. void put(K key, V value) {
  23. if(key == null)
  24. return;
  25.  
  26. remove(key);
  27.  
  28. Pair<K,V> pair = new Pair<K, V>(key, value);
  29. array[getIndexOf(key)].add(pair);
  30. size++;
  31.  
  32. if(!isBigEnough())
  33. resize(array.length*2);
  34. }
  35.  
  36. void remove(K key) {
  37. Iterator<Pair<K,V>> iterator = array[getIndexOf(key)].iterator();
  38.  
  39. while(iterator.hasNext()) {
  40. if (iterator.next().key.equals(key)) {
  41. iterator.remove();
  42. size--;
  43. return;
  44. }
  45. }
  46. }
  47.  
  48. V get(K key) {
  49. Set<Pair<K,V>> set = array[getIndexOf(key)];
  50.  
  51. for(Pair<K,V> pair : set)
  52. if(pair.key.equals(key))
  53. return pair.value;
  54.  
  55. return null;
  56. }
  57.  
  58. Set<Pair<K,V>>[] getArray() {
  59. return array;
  60. }
  61.  
  62. int getIndexOf(K key) {
  63. return key.hashCode() % array.length;
  64. }
  65.  
  66. boolean isBigEnough() {
  67. return size <= array.length * 2;
  68. }
  69.  
  70. void resize(int newSize) {
  71. Iterator<Pair<K,V>> iterator = iterator();
  72. Pair<K, V> pair;
  73. createArray(newSize);
  74.  
  75. while(iterator.hasNext())
  76. {
  77. pair = iterator.next();
  78. array[getIndexOf(pair.key)].add(pair);
  79. }
  80. }
  81.  
  82. Iterator<Pair<K,V>> iterator() {
  83. return new Iterator<Pair<K, V>>() {
  84.  
  85. Iterator<Pair<K,V>> iterator;
  86. int offset = 0;
  87. Set<Pair<K, V>>[] array = DSAHashTable.this.array;
  88.  
  89. @Override
  90. public boolean hasNext() {
  91. do {
  92. if (iterator == null)
  93. iterator = array[offset].iterator();
  94.  
  95. if (iterator.hasNext())
  96. return true;
  97.  
  98. iterator = null;
  99. } while(++offset < array.length);
  100.  
  101. return false;
  102. }
  103.  
  104. @Override
  105. public Pair<K, V> next() {
  106. do {
  107. if (iterator == null)
  108. iterator = array[offset].iterator();
  109.  
  110. if (iterator.hasNext())
  111. return iterator.next();
  112.  
  113. iterator = null;
  114. } while(++offset < array.length);
  115.  
  116. throw new NoSuchElementException();
  117. }
  118. };
  119. }
  120.  
  121. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement