Advertisement
Cinster

Untitled

Nov 9th, 2018
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.34 KB | None | 0 0
  1. import java.util.LinkedList;
  2. import java.util.Queue;
  3.  
  4. public class Q3_1_3 {
  5.  
  6. public class table<Key extends Comparable<Key>, Value> {
  7.  
  8. private class Node {
  9. private Key key;
  10. private Value value;
  11. private Node next;
  12.  
  13. public Node(Key key, Value value, Node next) {
  14. this.key = key;
  15. this.value = value;
  16. this.next = next;
  17. }
  18. }
  19.  
  20. private Node first;
  21. private int size;
  22.  
  23. public int size() {
  24. return size;
  25. }
  26.  
  27. public boolean isEmpty() {
  28. return size == 0;
  29. }
  30.  
  31. public void put(Key key, Value value) {
  32.  
  33. if (value == null) {
  34. delete(key);
  35. return;
  36. }
  37.  
  38. if (isEmpty()) {
  39. first = new Node(key, value, null);
  40. size++;
  41. return;
  42. }
  43.  
  44. //Check first node
  45. if (first.key.compareTo(key) == 0) {
  46. first.value = value;
  47. return;
  48. } else if (first.key.compareTo(key) > 0) {
  49. first = new Node(key, value, first);
  50. size++;
  51. return;
  52. }
  53.  
  54. //Check all other nodes
  55. for(Node node = first; node != null; node = node.next) {
  56. if (node.next != null) {
  57. if (node.next.key.compareTo(key) == 0) {
  58. node.next.value = value;
  59. return;
  60. } else if (node.next.key.compareTo(key) > 0) {
  61. Node newNode = new Node(key, value, node.next);
  62. node.next = newNode;
  63. size++;
  64. return;
  65. }
  66. } else {
  67. Node newNode = new Node(key, value, null);
  68. node.next = newNode;
  69. size++;
  70. return;
  71. }
  72. }
  73. }
  74.  
  75. public Value get(Key key) {
  76.  
  77. for(Node node = first; node != null; node = node.next) {
  78. if (node.key.compareTo(key) == 0) {
  79. return node.value;
  80. }
  81. }
  82.  
  83. return null;
  84. }
  85.  
  86. public void delete(Key key) {
  87.  
  88.  
  89. if (isEmpty()) {
  90. return;
  91. }
  92.  
  93. //Check first node
  94. if (first.key.compareTo(key) == 0) {
  95. first = first.next;
  96. size--;
  97. return;
  98. }
  99.  
  100. //Check all other nodes
  101. for(Node node = first; node != null; node = node.next) {
  102. if (node.next != null && node.next.key.compareTo(key) == 0) {
  103. node.next = node.next.next;
  104. size--;
  105. return;
  106. }
  107. }
  108. }
  109.  
  110. public boolean index(Key key) {
  111. for(Node node = first; node != null; node = node.next) {
  112. if (node.key.compareTo(key) == 0) {
  113. return true;
  114. }
  115. }
  116.  
  117. return false;
  118. }
  119.  
  120. public int size(Key low, Key high) {
  121. int size = 0;
  122. boolean inTheRange = false;
  123.  
  124. for(Node node = first; node != null; node = node.next) {
  125. if (!inTheRange) {
  126. if (node.key.compareTo(low) == 0
  127. || node.key.compareTo(low) > 0) {
  128. size++;
  129. inTheRange = true;
  130. }
  131. } else {
  132. if (node.key.compareTo(high) == 0
  133. || node.key.compareTo(high) < 0) {
  134. size++;
  135. } else {
  136. return size;
  137. }
  138. }
  139. }
  140.  
  141. return size;
  142. }
  143.  
  144. public Iterable<Key> keys(Key low, Key high) {
  145. Queue<Key> keys = new LinkedList<>();
  146. boolean inTheRange = false;
  147.  
  148. for(Node node = first; node != null; node = node.next) {
  149. if (!inTheRange) {
  150. if (node.key.compareTo(low) == 0
  151. || node.key.compareTo(low) > 0) {
  152. keys.add(node.key);
  153. inTheRange = true;
  154. }
  155. } else {
  156. if (node.key.compareTo(high) == 0
  157. || node.key.compareTo(high) < 0) {
  158. keys.add(node.key);
  159. } else {
  160. return keys;
  161. }
  162. }
  163. }
  164.  
  165. return keys;
  166. }
  167.  
  168. public Iterable<Key> keys() {
  169. Queue<Key> keys = new LinkedList<>();
  170.  
  171. for(Node node = first; node != null; node = node.next) {
  172. keys.add(node.key);
  173. }
  174.  
  175. return keys;
  176. }
  177.  
  178. }
  179.  
  180. public static void main(String[] args) {
  181. Q3_1_3 exercise3 = new Q3_1_3();
  182. table<Integer, String> table = exercise3.new table<>();
  183.  
  184. //Test put() and get() and keys()
  185. //unsorted to show sort
  186. table.put(5, "Value 4");
  187. table.put(1, "Value 8");
  188. table.put(9, "Value 1");
  189. table.put(2, "Value 12");
  190. table.put(0, "Value 0");
  191. table.put(99, "Value 99");
  192.  
  193. System.out.println();
  194.  
  195. for(Integer key : table.keys()) {
  196. System.out.println("Key " + key + ": " + table.get(key));
  197. }
  198. System.out.println();
  199. //delete key 2 from the list
  200. System.out.println("Delete key 2");
  201. table.delete(2);
  202. for(Integer key : table.keys()) {
  203. System.out.println("Key " + key + ": " + table.get(key));
  204. }
  205.  
  206. System.out.println();
  207.  
  208. //index a key that does not exist, and a key that does
  209. System.out.println("index key 98: " + table.index(98));
  210. System.out.println("index key 99: " + table.index(99) );
  211.  
  212. //check if it is empty
  213. System.out.println("Is empty: " + table.isEmpty() );
  214.  
  215. //check the size of the list
  216. System.out.println("Size: " + table.size() );
  217.  
  218.  
  219. }
  220.  
  221. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement