collections与collection

------- 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)
{
 
}
*/

------- android培训java培训、期待与您交流! ----------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值