|
| 1 | +package Lessons; |
| 2 | + |
| 3 | +import java.util.ArrayList; |
| 4 | + |
| 5 | +/* This is a lesson on how Integer differs from other objects when it comes to copying values |
| 6 | + * |
| 7 | + * - .clone() on an ArrayList<> gives you a new ArrayList. If it's an ArrayList of Integers |
| 8 | + * then you get your own deep copy of Integers. If it's an ArrayList of other objects then |
| 9 | + * your ArrayList contains references to the original objects. |
| 10 | + */ |
| 11 | +public class ShallowDeep { |
| 12 | + public static void main (String [] args){ |
| 13 | + /***********/ |
| 14 | + /* Integer */ |
| 15 | + /***********/ |
| 16 | + System.out.println("************* Integer **************"); |
| 17 | + ArrayList<Integer> array1 = new ArrayList<>(); |
| 18 | + ArrayList<Integer> array2 = new ArrayList<>(); |
| 19 | + |
| 20 | + Integer a = 2; |
| 21 | + array1.add(a); |
| 22 | + array2.add(a); |
| 23 | + printArrays(array1, array2); |
| 24 | + |
| 25 | + a = 88; // changed value of a, but neither array is affected. |
| 26 | + printArrays(array1, array2); |
| 27 | + |
| 28 | + array1.set(0, 99); // changed entry in 1st array. 2nd array remains unaffected. |
| 29 | + printArrays(array1, array2); |
| 30 | + |
| 31 | + array2 = (ArrayList<Integer>) array1.clone(); // cloned 1st array into 2nd array |
| 32 | + printArrays(array1, array2); |
| 33 | + |
| 34 | + array1.set(0, 700); // changed value of element in 1st array, 2nd array remains unaffected |
| 35 | + printArrays(array1, array2); |
| 36 | + |
| 37 | + /**************/ |
| 38 | + /* IntWrapper */ |
| 39 | + /**************/ |
| 40 | + System.out.println("************* IntWrapper **************"); |
| 41 | + ArrayList<IntWrapper> array3 = new ArrayList<>(); |
| 42 | + ArrayList<IntWrapper> array4 = new ArrayList<>(); |
| 43 | + |
| 44 | + IntWrapper four = new IntWrapper(4); |
| 45 | + array3.add(four); |
| 46 | + array4.add(four); |
| 47 | + printArrays2(array3, array4); |
| 48 | + |
| 49 | + four.value = 55; // changed value in 1 array, and it changes in other array too |
| 50 | + printArrays2(array3, array4); |
| 51 | + |
| 52 | + array3.get(0).value = 99; // changed value in 1st array, changes in 2nd array also |
| 53 | + printArrays2(array3, array4); |
| 54 | + |
| 55 | + /* .clone() */ |
| 56 | + ArrayList<IntWrapper> array5 = new ArrayList<>(); |
| 57 | + ArrayList<IntWrapper> array6 = new ArrayList<>(); |
| 58 | + |
| 59 | + IntWrapper six = new IntWrapper(6); |
| 60 | + IntWrapper seven = new IntWrapper(7); |
| 61 | + array5.add(six); |
| 62 | + array5.add(seven); |
| 63 | + printArrays2(array5, array6); |
| 64 | + |
| 65 | + array6.addAll((ArrayList<IntWrapper>) array5.clone()); //cloned 1st array into 2nd array |
| 66 | + printArrays2(array5, array6); |
| 67 | + |
| 68 | + array6.get(0).value = 99; // changed value in 1st array, and it changes in 2nd array as well |
| 69 | + printArrays2(array5, array6); |
| 70 | + } |
| 71 | + |
| 72 | + private static void printArrays(ArrayList<Integer> array1, ArrayList<Integer> array2){ |
| 73 | + System.out.println("(1st) array = " + array1); |
| 74 | + System.out.println("(2nd) array = " + array2 + "\n"); |
| 75 | + } |
| 76 | + |
| 77 | + private static void printArrays2(ArrayList<IntWrapper> array1, ArrayList<IntWrapper> array2){ |
| 78 | + System.out.println("(1st) array = " + array1); |
| 79 | + System.out.println("(2nd) array = " + array2 + "\n"); |
| 80 | + } |
| 81 | +} |
0 commit comments