code: @NullSafe
    public static <T> T[] shuffle(T[] array) {
  
      if (isNotEmpty(array)) {
  
        Random random = new Random(System.currentTimeMillis());
  
        for (int index = 0, lengthMinusOne = array.length - 1; index < lengthMinusOne; index++) {
  
          int randomIndex = (random.nextInt(lengthMinusOne - index) + 1);
  
          swap(array, index, index + randomIndex);
        }
      }
  
      return array;
    }
docs: Shuffles the elements in the array.  This method guarantees a random, uniform shuffling of the array elements
  with an operational efficiency of O(n).
  
  @param <T> Class type of the elements in the array.
  @param array array of elements to shuffle.
  @return the array of elements shuffled.
  @see #isNotEmpty(Object[])