Advertisement
Guest User

Untitled

a guest
Dec 10th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.77 KB | None | 0 0
  1. import java.util.ArrayList;
  2. import java.util.Arrays;
  3. import java.util.Collection;
  4. import java.util.HashSet;
  5. import java.util.TreeSet;
  6.  
  7. public class ObjectOverride {
  8.  
  9. public static class NameAge implements Comparable {
  10. public String _name;
  11. public int _age;
  12. public NameAge(String name, int age) {
  13. _name = name;
  14. _age = age;
  15. }
  16. @Override
  17. public String toString() {
  18. return _name + ": " + _age;
  19. }
  20.  
  21. @Override
  22. public boolean equals(Object o) {
  23. if (!(o instanceof NameAge))
  24. return false;
  25. NameAge n = (NameAge)o;
  26. //String s2 = (String)o; // o is not a String! ClassCastException
  27. return _name.equals(n._name) && _age == n._age;
  28. }
  29.  
  30. // Rule: return 1 if this should come after o
  31. // return -1 if this should come before o
  32. // return 0 if equals() say these are equal!
  33. @Override
  34. public int compareTo(Object o) {
  35. if (!(o instanceof NameAge))
  36. return 1; // Just consistently choose 1 or -1
  37.  
  38. NameAge n = (NameAge)o;
  39.  
  40. if (!this._name.equals(n._name))
  41. // Compare Strings if not equal
  42. return -this._name.compareTo(n._name);
  43.  
  44. else if (this._age != n._age)
  45. // Compare ages if not equal
  46. return -(this._age - n._age);
  47.  
  48. return 0; // Must be equal
  49. }
  50.  
  51. }
  52.  
  53. // Try commenting out toString() and equals() above
  54. public static void main1(String[] args) {
  55. NameAge n1 = new NameAge("Scott", 38);
  56. NameAge n2 = new NameAge("Penny", 1);
  57. NameAge n3 = new NameAge("Scott", 38);
  58.  
  59. System.out.println("toString()");
  60. System.out.println(n1);
  61. System.out.println(n2);
  62. System.out.println(n3);
  63.  
  64. System.out.println("Simple ==");
  65. System.out.println(n1 == n1);
  66. System.out.println(n1 == n2);
  67. System.out.println(n1 == n3);
  68.  
  69. System.out.println("equals()");
  70. System.out.println(n1.equals(n1));
  71. System.out.println(n1.equals(n2));
  72. System.out.println(n1.equals(n3));
  73. }
  74.  
  75. // Try commenting out toString() and equals() above
  76. public static void main2(String[] args) {
  77. NameAge n1 = new NameAge("Scott", 38);
  78. NameAge n2 = new NameAge("Penny", 1);
  79. NameAge n3 = new NameAge("Scott", 38);
  80.  
  81. ArrayList<NameAge> l = new ArrayList<NameAge>();
  82. l.add(n1);
  83. l.add(n2);
  84. System.out.println(l);
  85. System.out.println(n1 + " :: " + l.contains(n1) + " / " + l.indexOf(n1));
  86. System.out.println(n2 + " :: " + l.contains(n2) + " / " + l.indexOf(n2));
  87. System.out.println(n3 + " :: " + l.contains(n3) + " / " + l.indexOf(n3));
  88.  
  89. // Why does the following line work?
  90. TreeSet<NameAge> t = new TreeSet<NameAge>(l);
  91. //Collection<NameAge> h = new TreeSet<NameAge>(l);
  92.  
  93. System.out.println(t);
  94.  
  95. // Explore other abstractions for Collectons<E>, e.g., Iterable<E>
  96. // This is why we can use a for-each loop with collections
  97. for (NameAge na : t)
  98. System.out.println(" - " + na);
  99.  
  100. System.out.println(n1 + " :: " + t.contains(n1));
  101. System.out.println(n2 + " :: " + t.contains(n2));
  102. System.out.println(n3 + " :: " + t.contains(n3));
  103. }
  104.  
  105. // Try commenting out toString() and equals() and compareTo() above
  106. public static void main3(String[] args) {
  107. NameAge n1 = new NameAge("Scott", 38);
  108. NameAge n2 = new NameAge("Penny", 1);
  109. NameAge n3 = new NameAge("Scott", 38);
  110. NameAge n4 = new NameAge("Scott", 28);
  111.  
  112. TreeSet<NameAge> t = new TreeSet<NameAge>();
  113. t.add(n1);
  114. t.add(n2);
  115. t.add(n3);
  116. t.add(n4);
  117. System.out.println(t);
  118.  
  119. // How could we reverse the order
  120.  
  121. // Explore other abstractions for Collectons<E>, e.g., Iterable<E>
  122. // This is why we can use a for-each loop with collections
  123. for (NameAge na : t)
  124. System.out.println(" - " + na);
  125.  
  126. System.out.println(n1 + " :: " + t.contains(n1));
  127. System.out.println(n2 + " :: " + t.contains(n2));
  128. System.out.println(n3 + " :: " + t.contains(n3));
  129. System.out.println(n4 + " :: " + t.contains(n4));
  130.  
  131. NameAge n5 = new NameAge("Noah", 5);
  132. System.out.println(n5 + " :: " + t.contains(n5));
  133. }
  134.  
  135. // Fun with arrays
  136. public static void main4(String[] args) {
  137. NameAge[] array = new NameAge[] { new NameAge("Scott", 38), new NameAge("Penny", 1),
  138. new NameAge("Scott", 38), new NameAge("Scott", 28)};
  139.  
  140. for (NameAge na : array)
  141. System.out.println(" - " + na);
  142.  
  143. System.out.println("\nSorted:");
  144.  
  145. // Sorting works for primimitives and any
  146. // object that implements Comparable
  147. Arrays.sort(array);
  148. for (NameAge na : array)
  149. System.out.println(" - " + na);
  150.  
  151. System.out.println("=====================");
  152.  
  153. ///////////////////////////////////////////////////////////////
  154.  
  155. // We can copy an entire array to a new one of different length
  156. NameAge[] array2 = Arrays.copyOf(array, array.length*2);
  157. for (NameAge na : array2)
  158. System.out.println(" - " + na);
  159.  
  160. System.out.println("=====================");
  161.  
  162. ///////////////////////////////////////////////////////////////
  163.  
  164. // We can convert arrays to Collections and back
  165. ArrayList<NameAge> list = new ArrayList<NameAge>(Arrays.asList(array2));
  166. System.out.println(list);
  167.  
  168. NameAge[] array3 = list.toArray(new NameAge[list.size()]);
  169. for (NameAge na : array3)
  170. System.out.println(" - " + na);
  171.  
  172. // TreeSet<NameAge> tree = new TreeSet<NameAge>(Arrays.asList(array2));
  173. // System.out.println(list);
  174. // System.out.println(tree);
  175. }
  176.  
  177. public static void main(String[] args) {
  178. Double a = 2.0;
  179. Double b = 2.0;
  180. System.out.println(a == b); // No method call or operator
  181. // == is address equality
  182.  
  183. System.out.println(a.equals(b)); // Explicitly invoke equals() call
  184.  
  185. System.out.println(a + 0 == b + 0); // Operator invokes call
  186. // d.doubleValue() + 0 == e.doubleValue() + 0
  187. // then primitive comparison
  188. }
  189. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement