package com.latteyan.learn.java.base.class2.collection;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * 
* @ClassName: T 
* @Description: TODO	Collections的测试
* @author codsoul
* @date 2013-4-14 下午10:19:36 
*
 */
public class 一些集合的简单算法 {
	public static void main(String[] args) {
		List<String> a = new ArrayList<String>();
		a.add("2");
		a.add("1");
		a.add("3");
		a.add("4");
		
		List<String> b = new ArrayList<String>();
		b.add("4");
		b.add("5");
		b.add("6");
		b.add("7");
		
		//找交集
		//retainAll_Test(a,b);
		
		//截取元素
		//subList_Test(a);
		
		//排序-升序
		//升序(a);
		
		//排序-降序
		//降序(a);
		
		//最大值测试
		//max_Test(a);
		
		//二分查询测试
		//binarySearch_Test(a);
		
		//将原列表中的所有复制元素到目标列表上(a, b);
		
		//将列表中的所有位置设置为相同的值(a);
		
		//将所有的值添加到集合中
		//addAll_Test(a);
		
		//用newValue取代所有值为oldValue的元素
		//replaceAll_Test(a);
		
		//交换给定偏移量的两个元素
		//swap_Test(a);
		
		//逆置列表中元素的顺序
		//reverse_Test(a);
		
		//如果两个集合没有共同的元素,则返回true
		//disjoint_Test(a, b);
		
		
		frequency_Test(a);
	}
	
	/**
	 * Collections找出两个集合的交集retainAll方法
	 */
	public static void retainAll_Test(List<String> a, List<String> b){
		Set<String> result = new HashSet<String>(a);
		result.retainAll(b);
		System.out.println(result.toString());
	}
	
	/**
	 * Collections截取中间元素
	 */
	public static void subList_Test(List<String> a){
		System.out.println(a.subList(0, 2));
	}
	
	/**
	 * Collections排序-升序
	 * @param a
	 */
	public static void 升序(List<String> a){
		Collections.sort(a);
		System.out.println(a);
	}
	
	/**
	 * Collections排序-降序
	 * @param a
	 */
	public static void 降序(List<String> a){
		Collections.sort(a, Collections.reverseOrder());
		System.out.println(a);
	}
	
	/**
	 * Collections的二分查找,集合需要是排好序的
	 */
	public static void binarySearch_Test(List<String> a){
		//当返回的数值大于0，则表示匹配对象的索引
		int i = Collections.binarySearch(a, "b");
		
		int ii = Collections.binarySearch(a,"1");
		System.out.println(i);
		System.out.println(ii); System.out.println(a.get(ii));
	}
	
	/**
	 * Collections的max
	 * @param a
	 */
	public static void max_Test(List<String> a){
		String max = Collections.max(a);
		System.out.println(max);
	}
	
	/**
	 * Connection.copy
	 * @param a
	 * @param b
	 */
	public static void 将原列表中的所有复制元素到目标列表上(List<String> a, List<String> b){
		Collections.copy(a, b);  //from b to a
		System.out.println(a);
	}
	
	/**
	 * Connection.fill
	 * @param a
	 */
	public static void 将列表中的所有位置设置为相同的值(List<String> a){
		Collections.fill(a, "z");
		System.out.println(a);
	}
	
	/**
	 * addAll将所有的值添加到集合中。如果集合改变了，则返回true
	 */
	public static void addAll_Test(List<String> a){
		Collections.addAll(a, "1","2","3","4");
		System.out.println(a);
	}
	/**
	 * replaceAll 用newValue取代所有值为oldValue的元素
	 */
	public static void replaceAll_Test(List<String> a){
		Collections.replaceAll(a, "1", "xxxx");
		System.out.println(a);
	}
	
	/**
	 * 交换给定偏移量的两个元素
	 */
	public static void swap_Test(List<String> a){
		Collections.swap(a, 1, 2);
		System.out.println(a);
	}
	
	/**
	 * 逆置列表中的元素顺序
	 */
	public static void reverse_Test(List<String> a){
		Collections.reverse(a);
		System.out.println(a);
	}
	
	/**
	 * 旋转列表中的元素,将索引i的条目移动到位置(i+d)%l.size()
	 */
	//rotate(List<?> l ,int d)
	
	/**
	 * 返回c中与对象o相同的元素个数
	 */
	//frequency(Collection<?> c, Object o)
	public static void frequency_Test(List<String> a){
		System.out.println(	Collections.frequency(a, "z") );
	}
	
	/**
	 * 如果两个集合没有共同的元素,则返回true
	 */
	//disjoint(Collection<?> c1,Collection<?>)
	public static void disjoint_Test(List<String> a, List<String> b){
		System.out.println(	Collections.disjoint(a, b) );
	}
}
