Random permutation of int[] and ArrayList
Use for-each

Use for-each idiom to loop over an array when possible, and you can drop this comment:


//loop for element in array
for (int i = 0; i &lt; array.length; i++) {
    System.out.print(array[i] + " ");
}



Like this, and without the pointless comment:

for (int item : array) {
    System.out.print(item + " ");
}


Use a different list implementation for unused

In SmartPermutationGenerator,
you're using an ArrayList for the unused numbers,
and randomly remove items from it.
An ArrayList is backed by an array,
and removing items from arrays is an expensive operation:
elements after the removed element must be moved to fill the gap.
You can improve that point by using a LinkedList instead,
where removal of elements is cheap.

public List&lt;Integer&gt; getRandomPermutation() {
    List&lt;Integer&gt; unused = new LinkedList&lt;&gt;();
    for (int i = 0; i &lt; size; i++) {
        unused.add(i + 1);
    }

    List&lt;Integer&gt; permutation = new ArrayList&lt;&gt;();
    for (int k = 0; k &lt; size; k++) {
        int pos = random.nextInt(unused.size());
        permutation.add(unused.get(pos));
        unused.remove(pos);
    }

    return permutation;
}


Use boolean expressions directly without ==

You don't need to write == true when evaluating boolean expressions like this:


if (fill == true) {



This is exactly the same but shorter, simpler, intuitive:

if (fill) {


Remove unused code

These variables are completely unused, remove them:


  int low = 1;
  int high = 10;
  int range = high - low + 1;



Printing arrays

In both implementations, you're using a for loop to print arrays.
There's are easier ways.

The toString method of List implementations gives a nice representation,
so you can print them directly:

List&lt;Integer&gt; list = Arrays.asList(1, 2, 3, 4, 5);
System.out.println(list);
// prints: [1, 2, 3, 4, 5]


To print arrays in the same format, you can use Arrays.toString:

int[] arr = {1, 2, 3, 4, 5};
System.out.println(Arrays.toString(arr));
// prints: [1, 2, 3, 4, 5]


Formatting

Your code doesn't follow the common formatting used by auto-formatting of editors like Eclipse, IntelliJ, NetBeans. Instead of this:


  do
  {
    fill = true;
    r = rand.nextInt(10) + 1;

     for (int i = 0; i &lt; array.length; i++)//loop for random number between 1 to 10
     {          
        if (array[i] == r)
        {
           fill = false;
        }
     }



Following the same style as recommended by these tools,
your code would look like this:

do {
    fill = true;
    r = rand.nextInt(10) + 1;

    for (int item : array) {
        if (item == r) {
            fill = false;
        }
    }