Find The Parity Outlier
Your approach is far too complicated.


In checkEvenOrOdd() you create a ArrayList&lt;Integer&gt; containing
zeros or ones.
In search() you create an Integer a[] from that list.
Then you iterate over the array and count the number of zeros or ones.


You can iterate over int[] integers directly to find the number of odd (or even) entries:

    int oddCount = 0;
    for (int n : integers) {
        if (n % 2 != 0) {
            oddCount += 1;
        }
    }


Note how a "enhanced for statement" can be used to iterate over
the array elements, instead of a for-loop or a while-statement for
the array indices, as in your code.

There is also no need to use a double result or floating point literals
when doing an integer remainder calculation. 

    if (counter == 1)
        return true;
    else
        return false;


can be simplified to

    return (counter == 1)


But in this case the entire logic can be put into a single function,
e.g. like this:

public static int find(int[] integers) {

    int oddCount = 0;
    for (int n : integers) {
        if (n % 2 != 0) {
            oddCount += 1;
        }
    }

    if (oddCount == 1) {
        for (int n : integers) {
            if (n % 2 != 0) {
                return n;
            }
        }
    } else {
        for (int n : integers) {
            if (n % 2 == 0) {
                return n;
            }
        }
    }
    return 0;
}


Then one could try to avoid the code repetition for the even/odd
case.

But actually I would suggest a completely different, more efficient  approach:


Check the first two array elements if they are even or odd.
If they are both even, the outlier can be found
by search for the first odd element, starting at index 2.
If they are both odd, the outlier must be even, and can be found
similarly.
If the first two array elements have different parity, one of 
them is the outlier. Which one, can be determined by checking the third
array element.