Listコレクションの重複値を除去する(4つの使いやすい方法)


リスト集合における繰返し値を処理するには,リスト集合を遍歴して判断して別のリスト集合に付与する方法と,set集合に付与してリスト集合に返す方法の2つがほとんどである. 
しかしset集合に付与すると,set集合は無秩序であるため,元の順序が狂ってしまう.だからsetの特性で重くして順番を乱さないことができるのではないかと思っています. 
試してみてもいいですが、いくつかの方法は状況によってそれぞれの優位性があります.今コードを書いて、比較してみましょう.
public class TestList {
	public static void main(String[] args) {
		List list = new ArrayList();
		list.add("aaa");
        list.add("bbb");
        list.add("aaa");
        list.add("aba");
        list.add("aaa");
        
//        List newList = test1(list);
//        List newList = test2(list);
        List newList = test3(list);
        System.err.print("      : ");
        for (String str : newList) {
			System.err.print(str + "  ");
		}
	}
	//    
	public static List test1 (List list) {
		Set set = new HashSet();
		List newList = new ArrayList();
		for (String str : list) {
			if (set.add(str)) {
				newList.add(str);
			}
		}
		return newList;
	}
	//    
	public static List test2 (List list) {
		List newList = new ArrayList();
		for (String str : list) {
			if (!newList.contains(str)) {
				newList.add(str);
			}
		}
		return newList;
	}
	//        
	public static List test3 (List list) {
//		Set set = new HashSet();
//		set.addAll(list);
//		List newList = new ArrayList(set);
//		List newList = new ArrayList(new HashSet(list));
		List newList = new ArrayList(new TreeSet(list));//     
		return newList;
	}
}