I tried to demonstrate the difference between List.contains() and manually searching execution times the result is awesome. Here is the code,
public static void main(String argv[]) {
    List<String> list = new ArrayList<String>();
    list.add("a");
    list.add("a");
    list.add("a");
    list.add("a");
    list.add("a");
    list.add("a");
    list.add("b");
    long startTime = System.nanoTime();
    list.contains("b");
    long endTime = System.nanoTime();
    long duration = endTime - startTime;
    System.out.println("First run: "+duration);
    startTime = System.nanoTime();
    for(String s: list){
        if(s.equals("b"))
            break;
    }
    endTime = System.nanoTime();
    duration = endTime - startTime;
    System.out.println("Second run: "+duration);
}
Output:
- First run: 7500
- Second run: 158685 - how contains() function makes such a big difference? 
- which search algorithm does it use? 
- if list conatins the searched element, does it terminate searching at first element? 
 
 
     
     
     
     
    