package cn.itcast.p2.toolclass.collections.demo;

 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
 import java.util.TreeSet;

 import cn.itcast.p2.comparator.ComparatorByLength;

 public class CollectionsDemo {

     public static void main(String[] args) {
         /*
          * Collections:是集合框架的工具类。
          * 里面的方法都是静态的。
          */

         demo_4();

     }

     public static void demo_4() {
         List<String> list = new ArrayList<String>();

         list.add("abcde");
         list.add("cba");
         list.add("aa");
         list.add("zz");
         list.add("cba");
         list.add("nbaa");
         Collections.sort(list);
         System.out.println(list);

         /*
          * 替换
          * static <T> boolean replaceAll(List<T> list, T oldVal, T newVal)
          * 使用另一个值替换列表中出现的所有某一指定值。
          *
          * 随机置换
          * static void shuffle(List<?> list)
          * 使用默认随机源对指定列表进行置换。
          * static void shuffle(List<?> list, Random rnd)
          * 使用指定的随机源对指定列表进行置换。
          *
          * 替换
          * static <T> void fill(List<? super T> list, T obj)
          *  使用指定元素替换指定列表中的所有元素。
          */
         Collections.replaceAll(list, "cba", "nba");
         System.out.println(list);

         Collections.shuffle(list);
         System.out.println(list);

         Collections.fill(list, "ccc");
         System.out.println(list);

     }
     /*
      * demo_4结果:[aa, abcde, cba, cba, nbaa, zz]
                  [aa, abcde, nba, nba, nbaa, zz]
                  [abcde, zz, nba, aa, nbaa, nba]  每次运行结果都不同
                   [ccc, ccc, ccc, ccc, ccc, ccc]

      */

     public static void demo_3() {
         /*
          * 反转顺序
          * static <T> Comparator<T> reverseOrder()
          * 返回一个比较器,它强行逆转实现了 Comparable 接口的对象 collection 的自然顺序。
          * static <T> Comparator<T> reverseOrder(Comparator<T> cmp)
          * 返回一个比较器,它强行逆转指定比较器的顺序。
          */
         TreeSet<String> ts = new TreeSet<String>(Collections.reverseOrder(new ComparatorByLength()));

         ts.add("abc");
         ts.add("cba");
         ts.add("hahaha");
         ts.add("aa");
         ts.add("zzz");

         System.out.println(ts);
     }
     /*
      * demo_3运行结果:  [hahaha, zzz, cba, abc, aa]
      */

     public static void demo_2() {
         List<String> list = new ArrayList<String>();

         list.add("abcde");
         list.add("cba");
         list.add("aa");
         list.add("zz");
         list.add("cba");
         list.add("nbaa");
         Collections.sort(list);
         System.out.println(list);

         /*
          * 二分搜索法
          * static <T> int binarySearch(List<? extends Comparable<? super T>> list, T key)
          *  static <T> int binarySearch(List<? extends T> list, T key, Comparator<? super T> c)
          */
         int index = Collections.binarySearch(list, "cba");
         System.out.println("index:"+index);
         int index2 = Collections.binarySearch(list, "aaa");
         System.out.println("index:"+index2);  //-2    如果没有所要搜寻的key存在,则返回(-(插入点)-1)

         /*
          * 获取最大值
          * static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)
          *  根据元素的自然顺序,返回给定 collection 的最大元素。
          * static <T> T max(Collection<? extends T> coll, Comparator<? super T> comp)
          * 根据指定比较器产生的顺序,返回给定 collection 的最大元素。
          *
          * 获取最小值  类似上面
          */
         String max = Collections.max(list, new ComparatorByLength());
         System.out.println("max:"+max);

     }

     public static void demo_1() {
         List<String> list = new ArrayList<String>();

         list.add("abcde");
         list.add("cba");
         list.add("aa");
         list.add("zz");
         list.add("cba");
         list.add("nbaa");

         System.out.println(list);

         /*
          * 两种比较方式
          */

         //对list集合进行指定顺序的排序。
         //static <T extends Comparable<? super T>> void sort(List<T> list)
         Collections.sort(list);
 //        mySort(list);               //sort的执行原理
         System.out.println(list);

         //static <T> void sort(List<T> list, Comparator<? super T> c)
         Collections.sort(list, new ComparatorByLength());
 //        mySort(list , new ComparatorByLength());  // 上一条代码的执行原理
         System.out.println(list);
     }

     //sort(List<T> list, Comparator<? super T> c)  执行原理
     public static <T> void mySort(List<T> list, Comparator<? super T> comp) {
         for (int i=0; i<list.size()-1; i++)
             for (int j=i+1; j<list.size(); j++)
             {
                 if (comp.compare(list.get(i), list.get(j)) > 0)
                     Collections.swap(list, i, j);
             }
     }

     //sort(List<T> list)的执行原理
     public static <T extends Comparable<? super T>> void mySort(List<T> list) {

         for (int i=0; i<list.size()-1; i++)
             for (int j=i+1; j<list.size(); j++)
             {
                 if (list.get(i).compareTo(list.get(j)) > 0)
                     Collections.swap(list, i, j);   //交换两个元素
             }
     }

 }

类Collections的静态方法的使用(代码)的更多相关文章

  1. 类Collections的静态方法

    类Collections的静态方法 此类完全由在 collection 上进行操作或返回 collection 的静态方法组成. 排序 static <T extends Comparable& ...

  2. WebMethod在webservice里面非静态方法能调用,在页面类里面,静态方法才能调用

    WebMethod在webservice里面非静态方法能调用,在页面类里面,静态方法才能调用

  3. Java:集合工具类-Collections

    Java.util.Collections 集合框架工具类Collections,其方法都是静态的,本身没有构造函数. 常见方法: static <T extends Comparable< ...

  4. 操作集合的工具类Collections

    1       操作集合的工具类Collections Java提供了一个操作Set.List和Map等集合的工具类:Collections,该工具类里提供了大量方法对集合元素进行排序.查询和修改等操 ...

  5. ES2015 类中的静态方法

    在ES2015中,终于不用用函数原型来实现类系统,可以直接使用关键字class,下面是对class的静态属性的研究: 举例:一个Node类,每一个Node类之间都可以建立从属关系,每一个Node实例下 ...

  6. python类的实例方法\静态方法\类方法区别解析(附代码)

    前言 搞了好久python,一直搞得不太清楚这几种类的方法,今天花时间好好测试一下,算是弄懂点皮毛吧. 三种方法的不同 先剽窃个图看一下 可以看到,实例是三种方法都可以调用的,而类只可以调用两种.所以 ...

  7. Java常用类(五)之集合工具类Collections

    前言 Java提供了一个操作Set.List和Map等集合的工具类:Collections,该工具类提供了大量方法对集合进行排序.查询和修改等操作, 还提供了将集合对象置为不可变.对集合对象实现同步控 ...

  8. java静态变量、静态方法和静态代码段

    先上实例 public class TestStatic { public static String staticString = "this is a static String&quo ...

  9. Java类的装载过程和静态代码块

    在Java中,类装载器把一个类装入Java虚拟机中,要经过三个步骤来完成:装载.连接和初始化,其中连接又可以分成校验.准备和解析三步,除了解析外,其它步骤是严格按照顺序完成的,各个步骤的主要工作如下: ...

随机推荐

  1. 《learning hard C#学习笔记》读书笔记(20)异步编程

      20.1 什么是异步编程异步编程就是把耗时的操作放进一个单独的线程中进行处理. 20.2 同步方式存在的问题   namespace 异步编程 { public partial class For ...

  2. 微信支付:curl出错,错误码:60

    如下是运行微信支付测试代码时出错代码: Fatal error: Uncaught exception ‘WxPayException‘ with message ‘curl出错,错误码:60‘ in ...

  3. mysql线上一个定时备份脚本

    数据库服务使用的是阿里云的mysql,远程进行定时的全量备份,备份到本地,以防万一.mysql数据库远程备份的数据最好打包压缩: [root@huanqiuPC crontab]# pwd/Data/ ...

  4. ubuntu下编译caffe

    Ubuntu下编译caffe 纯粹是个人编译的记录.不用CUDA(笔记本是amd卡,万恶的nvidia):不手动编译依赖包(apt-get是用来干啥的?用来直接装二进制包,以及自动解决依赖项的) ca ...

  5. Linq 中按照多个值进行分组(GroupBy)

    Linq 中按照多个值进行分组(GroupBy) .GroupBy(x => new { x.Age, x.Sex }) group emp by new { emp.Age, emp.Sex ...

  6. Linux版网易云音乐播放音乐时无限显示“网络错误”的解决办法

    安装 gstreamer0.10-plugins-good debian类系统: -plugins-good

  7. SharePoint 2010: Nailing the error &quot;The Security Token Service is unavailable&quot;

    http://blogs.technet.com/b/sykhad-msft/archive/2012/02/25/sharepoint-2010-nailing-the-error-quot-the ...

  8. Java Abstract Class

    在Baths-stomp里面的每个Fluent Interface Interactor Impl,都继承了MarketDataAccessor,which is an abstract class. ...

  9. Windows 回调监控 &lt;一&gt;

    在x86的体系结构中,我们常用hook关键的系统调用来达到对系统的监控,但是对于x64的结构,因为有PatchGuard的存在,对于一些系统关键点进行hook是很不稳定的,在很大几率上会导致蓝屏的发生 ...

  10. Android应用市场提交入口

    应用市场是整个移动生态系统的核心,然而对于中国用户来说,Google Play应用商店却因为种种原因,在中国一直无法长期稳定的运作,又加上Android系统的开源特性,从而在中国造就出大量的第三方应用 ...