/**
 * Quick Find Java Implementation Eager's Approach
 */
package com.weekone.union.quickfind;
import java.util.Random;
/**
 * @author Ishwar Singh
 *
 */
public class UnionQuickFind {
    private int[] itemsArr;
    public UnionQuickFind() {
        System.out.println("Calling: " + UnionQuickFind.class);
    }
    public UnionQuickFind(int n) {
        itemsArr = new int[n];
    }
    // p and q are indexes
    public void unionOperation(int p, int q) {
        // displayArray(itemsArr);
        int tempValue = itemsArr[p];
        if (!isConnected(p, q)) {
            itemsArr[p] = itemsArr[q];
            for (int i = 0; i < itemsArr.length; i++) {
                if (itemsArr[i] == tempValue) {
                    itemsArr[i] = itemsArr[q];
                }
            }
            displayArray(p, q);
        } else {
            displayArray(p, q, "Already Connected");
        }
    }
    public boolean isConnected(int p, int q) {
        return (itemsArr[p] == itemsArr[q]);
    }
    public void connected(int p, int q) {
        if (isConnected(p, q)) {
            displayArray(p, q, "Already Connected");
        } else {
            displayArray(p, q, "Not Connected");
        }
    }
    private void displayArray(int p, int q) {
        // TODO Auto-generated method stub
        System.out.println();
        System.out.print("{" + p + " " + q + "} -> ");
        for (int i : itemsArr) {
            System.out.print(i + ", ");
        }
    }
    private void displayArray(int p, int q, String message) {
        System.out.println();
        System.out.print("{" + p + " " + q + "} -> " + message);
    }
    public void initializeArray() {
        Random random = new Random();
        for (int i = 0; i < itemsArr.length; i++) {
            itemsArr[i] = random.nextInt(9);
        }
    }
    public void initializeArray(int[] receivedArr) {
        itemsArr = receivedArr;
    }
    public void displayArray() {
        System.out.println("INDEXES");
        System.out.print("{p q} -> ");
        for (int i : itemsArr) {
            System.out.print(i + ", ");
        }
        System.out.println();
    }
}
Main Class:- 
/**
 * 
 */
package com.weekone.union.quickfind;
/**
 * @author Ishwar Singh
 *
 */
public class UQFClient {
    /**
     * @param args
     */
    public static void main(String[] args) {
        int[] arr = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
        int n = 10;
        UnionQuickFind unionQuickFind = new UnionQuickFind(n);
        // unionQuickFind.initializeArray();
        unionQuickFind.initializeArray(arr);
        unionQuickFind.displayArray();
        unionQuickFind.unionOperation(4, 3);
        unionQuickFind.unionOperation(3, 8);
        unionQuickFind.unionOperation(6, 5);
        unionQuickFind.unionOperation(9, 4);
        unionQuickFind.unionOperation(2, 1);
        unionQuickFind.unionOperation(8, 9);
        unionQuickFind.connected(5, 0);
        unionQuickFind.unionOperation(5, 0);
        unionQuickFind.connected(5, 0);
        unionQuickFind.unionOperation(7, 2);
        unionQuickFind.unionOperation(6, 1);
    }
}
Output:
INDEXES
{p q} -> 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 
{4 3} -> 0, 1, 2, 3, 3, 5, 6, 7, 8, 9, 
{3 8} -> 0, 1, 2, 8, 8, 5, 6, 7, 8, 9, 
{6 5} -> 0, 1, 2, 8, 8, 5, 5, 7, 8, 9, 
{9 4} -> 0, 1, 2, 8, 8, 5, 5, 7, 8, 8, 
{2 1} -> 0, 1, 1, 8, 8, 5, 5, 7, 8, 8, 
{8 9} -> Already Connected
{5 0} -> Not Connected
{5 0} -> 0, 1, 1, 8, 8, 0, 0, 7, 8, 8, 
{5 0} -> Already Connected
{7 2} -> 0, 1, 1, 8, 8, 0, 0, 1, 8, 8, 
{6 1} -> 1, 1, 1, 8, 8, 1, 1, 1, 8, 8,