リストとセットを検索して比較すると、アンダーラインのハッシュアルゴリズムにより、セットの方が優れています。
リストの場合、最悪の場合、contains は最後まで検索します。Set の場合、ハッシュとバケットのため、サブセットのみを検索します。
使用例: ArrayList と HashSet に 1 ~ 100_000 の整数を追加します。ArrayList と HashSet で各整数を検索します。
Set には 9 ミリ秒かかりますが、List には 16232 秒かかります。
private static void compareSetvsList(){
List<Integer> list = new ArrayList<>() ;
Set<Integer> set = new HashSet<>() ;
System.out.println("Setting values in list and set .... ");
int counter = 100_000 ;
for(int i =0 ; i< counter ; i++){
list.add(i);
set.add(i);
}
System.out.println("Checking time .... ");
long l1 = System.currentTimeMillis();
for(int i =0 ; i< counter ; i++) list.contains(i);
long l2 = System.currentTimeMillis();
System.out.println(" time taken for list : "+ (l2-l1));
for(int i =0 ; i< counter ; i++)set.contains(i);
long l3 = System.currentTimeMillis();
System.out.println(" time taken for set : "+ (l3-l2));
// for 10000 time taken for list : 123 time taken for set : 4
// for 100000 time taken for list : 16232 time taken for set : 9
// for 1000000 time taken for list : hung time taken for set : 26
}