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. java中的静态变量、静态方法与静态代码块详解与初始化顺序

      我们知道类的生命周期分为装载.连接.初始化.使用和卸载的五个过程.其中静态代码在类的初始化阶段被初始化. 而非静态代码则在类的使用阶段(也就是实例化一个类的时候)才会被初始化. 静态变量 可以将静 ...

  3. JVM 字节码(四)静态方法、构造代码、this 以及 synchronized 关键字

    JVM 字节码(四)静态方法.构造代码.this 以及 synchronized 关键字 一.静态代码 public class ByteCodeStatic { private static fin ...

  4. java 多线程3:Thread类中的静态方法

    Thread类中的静态方法 Thread类中的静态方法表示操作的线程是"正在执行静态方法所在的代码块的线程".为什么Thread类中要有静态方法,这样就能对CPU当前正在运行的线程 ...

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

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

  6. Java:集合工具类-Collections

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

  7. 操作集合的工具类Collections

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

  8. ES2015 类中的静态方法

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

  9. php -- 类对象调用静态方法

    以前一直以为 静态方法的调用:类名::静态方法 非静态方法的调用:类对象->非静态方法 最近研究一个类,发现一个比较奇怪的问题,用“类对象->静态方法”这种方式居然成功的调用了静态方法.很 ...

随机推荐

  1. 如何解决Maven和SBT下载Jar包太慢

    国内:如何解决Maven和SBT下载Jar包太慢 Maven 远程仓库 <mirror> <id>ui</id> <mirrorOf>central&l ...

  2. 超简洁的CSS下拉菜单

    效果体验:http://hovertree.com/texiao/css/3.htm HTML文件代码: <!DOCTYPE html> <html xmlns="http ...

  3. [Google Guava]字符串处理:连接器、拆分器、字符匹配器

    一.连接器[Joiner] 二.拆分器[Splitter] 三.字符匹配器[CharMatcher] 四.字符集[Charsets] Charsets:针对所有Java平台都要保证支持的六种字符集提供 ...

  4. 修改bootstrap modal模态框的宽度

    原文链接:http://blog.csdn.net/wuhawang/article/details/52252912 修改模态框的宽度很简单,修改width属性就可以了 但是要注意的一点是,修改的不 ...

  5. BZOJ 3721: PA2014 Final Bazarek

    3721: PA2014 Final Bazarek Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 645  Solved: 261[Submit][ ...

  6. ECharts案例教程1

    原文:http://blog.csdn.net/whqet/article/details/42703973 简介 ECharts,缩写来自Enterprise Charts,商业级数据图表,是百度的 ...

  7. (六)CSS伪元素

    CSS伪元素用于向某些选择器设置特殊效果. 伪元素的用法和伪类相似: selector:pseudo-element {property:value;} CSS类也可以与伪元素配合使用: select ...

  8. 让c像python一样可以在命令行写代码并且编译

    在你亲爱的.bashrc/.zshrc中添加 ###C###go_libs="-lm"go_flags="-g -Wall -include allheads.h -O3 ...

  9. PTA - - 06-图1 列出连通集 (25分)

    06-图1 列出连通集   (25分) 给定一个有NN个顶点和EE条边的无向图,请用DFS和BFS分别列出其所有的连通集.假设顶点从0到N-1N−1编号.进行搜索时,假设我们总是从编号最小的顶点出发, ...

  10. js foreach、map函数

    语法:forEach和map都支持2个参数:一个是回调函数(item,index,input)和上下文: •forEach:用来遍历数组中的每一项:这个方法执行是没有返回值的,对原来数组也没有影响: ...