Advertisement
Cinster

Untitled

Nov 9th, 2018
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.93 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 indexkey(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 boolean indexval(String Value) {
  121.  
  122. for(Node node = first; node !=null ; node = node.next) {
  123. if(node.value.equals(Value)) {
  124. return true;
  125. }
  126.  
  127.  
  128. }
  129.  
  130.  
  131.  
  132. return false;
  133. }
  134.  
  135.  
  136. public int size(Key low, Key high) {
  137. int size = 0;
  138. boolean inTheRange = false;
  139.  
  140. for(Node node = first; node != null; node = node.next) {
  141. if (!inTheRange) {
  142. if (node.key.compareTo(low) == 0
  143. || node.key.compareTo(low) > 0) {
  144. size++;
  145. inTheRange = true;
  146. }
  147. } else {
  148. if (node.key.compareTo(high) == 0
  149. || node.key.compareTo(high) < 0) {
  150. size++;
  151. } else {
  152. return size;
  153. }
  154. }
  155. }
  156.  
  157. return size;
  158. }
  159.  
  160. public Iterable<Key> keys(Key low, Key high) {
  161. Queue<Key> keys = new LinkedList<>();
  162. boolean inTheRange = false;
  163.  
  164. for(Node node = first; node != null; node = node.next) {
  165. if (!inTheRange) {
  166. if (node.key.compareTo(low) == 0
  167. || node.key.compareTo(low) > 0) {
  168. keys.add(node.key);
  169. inTheRange = true;
  170. }
  171. } else {
  172. if (node.key.compareTo(high) == 0
  173. || node.key.compareTo(high) < 0) {
  174. keys.add(node.key);
  175. } else {
  176. return keys;
  177. }
  178. }
  179. }
  180.  
  181. return keys;
  182. }
  183.  
  184. public Iterable<Key> keys() {
  185. Queue<Key> keys = new LinkedList<>();
  186.  
  187. for(Node node = first; node != null; node = node.next) {
  188. keys.add(node.key);
  189. }
  190.  
  191. return keys;
  192. }
  193.  
  194. }
  195.  
  196. public static void main(String[] args) {
  197. Q3_1_3 exercise3 = new Q3_1_3();
  198. table<Integer, String> table = exercise3.new table<>();
  199.  
  200. //Test put() and get() and keys()
  201. //unsorted to show sort
  202. table.put(5, "Value 4");
  203. table.put(1, "Value 8");
  204. table.put(9, "Value 1");
  205. table.put(2, "Value 12");
  206. table.put(0, "Value 0");
  207. table.put(99, "Value 99");
  208.  
  209. System.out.println();
  210.  
  211. for(Integer key : table.keys()) {
  212. System.out.println("Key " + key + ": " + table.get(key));
  213. }
  214. System.out.println();
  215. //delete key 2 from the list
  216. System.out.println("Delete key 2");
  217. table.delete(2);
  218. for(Integer key : table.keys()) {
  219. System.out.println("Key " + key + ": " + table.get(key));
  220. }
  221.  
  222. System.out.println();
  223.  
  224. //index a key that does not exist, and a key that does
  225. System.out.println("index key 98: " + table.indexkey(98));
  226. System.out.println("index key 99: " + table.indexkey(99) );
  227.  
  228. System.out.println();
  229.  
  230. //index a value
  231. System.out.println("Index value 17: "+table.indexval("Value 17"));
  232. System.out.println("Index value 4: "+ table.indexval("Value 4"));
  233.  
  234. System.out.println();
  235.  
  236. //check if it is empty
  237. System.out.println("Is empty: " + table.isEmpty() );
  238.  
  239. //check the size of the list
  240. System.out.println("Size: " + table.size() );
  241.  
  242.  
  243. }
  244.  
  245. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement