package cn.edut.test_list;

import java.util.*;

public class Demo_removeEvensVer1 {
	public static void main(String[] args) {
		Integer[] a = {6,5,1,4,2};
		
		//算法一测试
		System.out.println(removeEvensVer1(createArrayList(a)).toString());
		
		//算法二测试
		try {
			System.out.println(removeEvensVer2(createArrayList(a)).toString());
		}catch (Exception e) {
			// TODO: handle exception
			System.out.println("算法二:迭代器非法");
		}
			
		//算法三测试
		System.out.println(removeEvensVer3(createArrayList(a)).toString());
		
	}
	public static <T> List<T> createArrayList(T[] a) {
		List<T> lst = new LinkedList<>();
		for(int i=0 ; i<a.length ;i++) {
			lst.add(a[i]);
		}
		return  lst; 
	}
	
	/** * 第一种算法 * 删除偶数 * ArrayList O(N^2) * LinkedList O(N^2) * @param lst */
	public static <T extends Integer > List<T> removeEvensVer1(List<T> lst) {
		int i=0 ;
		while( i < lst.size()) {
			if(lst.get(i)%2==0) {
				lst.remove(i);
			}else {
				i++;
			}
		}
		return lst;
	}
	
	/** * 第二种算法 (这里的迭代器是非法的!会报错) * 删除偶数 * (如果不报错,他们的时间复杂度分别为:) * ArrayList O(N^2) * LinkedList O(N) * @param lst */
	public static <T extends Integer > List<T> removeEvensVer2(List<T> lst) {
		for(T i : lst) { //因为有删除操作,这个是非法的
			if(i%2==0) {
				lst.remove(i) ;
			}
		}
		return lst ;
	}
	
	
	/** * 第三种算法 * 删除偶数 * * * * @param lst */
	public static <T extends Integer > List<T> removeEvensVer3(List<T> lst) {
		Iterator<T> iterator = lst.iterator() ; 
		while(iterator.hasNext()) {
			T temp = iterator.next();
			if(temp%2==0) {
				iterator.remove();
			}
		}
		return lst; 
	}
}