------- android培训、java培训、期待与您交流! ----------/*
集合框架的工具类。
Collections:集合框架的工具类。里面定义的都是静态方法。
Collections和Collection有什么区别?
Collection是集合框架中的一个顶层接口,它里面定义了单列集合的共性方法。
它有两个常用的子接口,
List:对元素都有定义索引。有序的。可以重复元素。
Set:不可以重复元素。无序。
Collections是集合框架中的一个工具类。该类中的方法都是静态的
提供的方法中有可以对list集合进行排序,二分查找等方法。
通常常用的集合都是线程不安全的。因为要提高效率。
如果多线程操作这些集合时,可以通过该工具类中的同步方法,将线程不安全的集合,转换成安全的。
*/
import java.util.*;
class CollectionsDemo
{
public static void main(String[] args)
{
sortDemo();
}
public static void binarySearchDemo()//定义方法 静态 无返回值
{
List<String> list = new ArrayList<String>();//定义集合List引用指向new出来的ArrayList集合使用泛型指定集合元素
//为String型的。
list.add("abcd");//添加
list.add("aaa");
list.add("zz");
list.add("kkkkk");
list.add("qq");
list.add("z");
Collections.sort(list,new StrLenComparator());/*sort方法
public static <T> void sort(List<T> list,
Comparator<? super T> c)
根据指定比较器产生的顺序对指定列表进行排序。此列表内的所有元素都必须可使用指定比较器相互比较
(也就是说,对于列表中的任意 e1 和 e2 元素,c.compare(e1, e2) 不得抛出 ClassCastException)。*/
sop(list);
//int index = Collections.binarySearch(list,"aaaa");
//int index = halfSearch(list,"cc");
int index = halfSearch2(list,"aaaa",new StrLenComparator());//使用StrLenComparator比较器查找“aaaa”在
//list集合中的索引值
sop("index="+index);
}
public static int halfSearch(List<String> list,String key)//折半查找方法
{
int max,min,mid;
max = list.size()-1;
min = 0;
while(min<=max)
{
mid = (max+min)>>1;// 向左移位相当于除以2;
String str = list.get(mid);
int num = str.compareTo(key);
if(num>0)
max = mid -1;
else if(num<0)
min = mid + 1;
else
return mid;
}
return min+1;
}
public static int halfSearch2(List<String> list,String key,Comparator<String> cmp)
{
int max,min,mid;
max = list.size()-1;
min = 0;
while(min<=max)
{
mid = (max+min)>>1;// /2;
String str = list.get(mid);
int num = cmp.compare(str,key);
if(num>0)
max = mid -1;
else if(num<0)
min = mid + 1;
else
return mid;
}
return min+1;
}
public static void maxDemo()
{
List<String> list = new ArrayList<String>();
list.add("abcd");
list.add("aaa");
list.add("zz");
list.add("kkkkk");
list.add("qq");
list.add("z");
Collections.sort(list);//根据元素的自然顺序 对指定列表按升序进行排序
sop(list);//输出list集合{abcd,aaa,zz,kkkk,qq,z}
String max = Collections.max(list,new StrLenComparator());//按照StrLenComparator()比较
//器的比较法返回list集合中最大的元素。
sop("max="+max);//输出{aaa,abcd,kkkk,qq,z,zz}
}
public static void sortDemo()
{
List<String> list = new ArrayList<String>();
list.add("abcd");
list.add("aaa");
list.add("zz");
list.add("kkkkk");
list.add("qq");
list.add("z");
sop(list);
//Collections.sort(list);按自然顺序排
Collections.sort(list,new StrLenComparator());//对list集合中元素按指定比较器排序,
//Collections.swap(list,1,2);在指定列表的指定位置处交换元素
sop(list);
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
class StrLenComparator implements Comparator<String>//定义比较器继承Comparator接口
{
public int compare(String s1,String s2)//实现compare方法
{
if(s1.length()>s2.length())//如果参数s1的长度大于s2.
return 1;//
if(s1.length()<s2.length())//长度小于
return -1;
return s1.compareTo(s2);//等于时候按字典顺序比较两个字符串
}
}
/*
class Student
{
}
list.add(new Student());
public static <T extends Comparable<? super T>> void sort(List<T> list)
{
}
*/