Tuesday, September 18, 2012

Final != Immutable

Just learned that in Java 1.6 (or anything after 1.3, from what I recall from the blog that I read), the final modifier on a primitive int array does not imply immutability (non-modifiable); found this when playing with a couple of sorting algorithms.  In the code below, if we want to use the same static array 'array' to be printed before sending it to various successive sorting methods, then we should send clones of it:


public class InsertionSort {
  private static int array[] 5974};

  public static void main(String args[]) {
    System.out.print("Insertion Sort: \nUnsorted: ");
    for (int member : array) {
      System.out.print(member + " ");
    }

    int[] sorted = insertionSort(array.clone());

    System.out.print("\nSorted: ");
    for (int member : sorted) {
      System.out.print(member + " ");
    }

    System.out.print("\n\nBubble Sort: \nUnsorted: ");
    for (int member : array) {
      System.out.print(member + " ");
    }

    sorted = bubbleSort(array.clone());

    System.out.print("\nSorted: ");
    for (int member : sorted) {
      System.out.print(member + " ");
    }

  }

  private static int[] insertionSort(int[] arr) {
    int i, j, newValue;
    for (i = 1; i < arr.length; i++) {
      newValue = arr[i];
      j = i;
      while (j > && arr[j - 1> newValue) {
        arr[j= arr[j - 1];
        j--;
      }
      arr[j= newValue;
    }
    return arr;
  }

  private static int[] bubbleSort(int[] arr) {
    int i, j, temp;

    for (i = 0; i < arr.length; i++) {
      for (j = 0; j < (arr.length - 1); j++) {
        if (arr[j> arr[j + 1]) {
          // move the bigger number (arr[j]) up:
          temp = arr[j + 1];
          arr[j + 1= arr[j];
          arr[j= temp;
        }
      }
    }
    return arr;
  }
}
-->

No comments:

Post a Comment