Efficiently compare 2 lists to replace and order
It sounds like you want the fruits unique to the first list to go at the end of the final list, and the fruits in both the first and second list go at the beginning of the final list.

For a problem like this, it might be better to use a LinkedList instead of an ArrayList, at least for the final list. Usually you're better off with an ArrayList, but in this case you can benefit from inserting an element at the front of the list is an \$O(1)\$ operation instead of \$O(n)\$.

You're on the right track with using a Map to speed this up with large data sets. Here is a potentially more efficient implementation:


Loop over the first list, filling a map firstMap with key: firstItem value: false 
Loop over the second list, and for each item, insert the result of 
firstMap.containsKey(secondItem) into firstMap with a key of secondItem
Finally, loop over the first array, if firstMap.get(firstItem) is true, insert the item at the front of the final list (it was in both lists). Else add it to the end of the final list (it was only in the first list).