1. sort

对集合进行排序

 public static <T extends Comparable<? super T>> void sort(List<T> list)

 public static <T> void sort(List<T> list,
                             Comparator<? super T> c)

  在使用List时想根据List中存储对象的某一字段进行排序,那么我们要用到Collections.sort方法对list排序,用Collections.sort方法对list排序有两种方法:

  • 第一种是list中的对象实现Comparable接口;
  • 第二种方法是根据Collections.sort重载方法来实现。

示例如下:

 public class SortTest {
     public static void main(String[] args) {
         List<String> listS = new ArrayList<String>();
         List<Employer1> list1 = new ArrayList<Employer1>();
         List<Employer2> list2 = new ArrayList<Employer2>();
         List<Employer3> list3 = new ArrayList<Employer3>();

         //一.将String类型的变量插入到listS中并排序
         //listS中的对象String 本身含有compareTo方法,所以可以直接调用sort方法,按自然顺序排序,即升序排序
         listS.add("5");
         listS.add("2");
         listS.add("9");
         Collections.sort(listS);

         //二.将Employer1类的对象插入到list1中并排序
         //将已创建的实现了Comparator接口的比较类MyCompare传入Collections的sort方法中即可实现依照MyCompare类中的比较规则。
         Employer1 a1 = new Employer1();
         Employer1 b1 = new Employer1();
         Employer1 c1 = new Employer1();
         a1.setName("a1");   a1.setAge(44);
         b1.setName("b1");   b1.setAge(55);
         c1.setName("b1");   c1.setAge(33);
         list1.add(a1);
         list1.add(b1);
         list1.add(c1);//Collections类的sort方法要求传入的第二个参数是一个已实现Comparator接口的比较器
         Collections.sort(list1, new MyCompare());

         //三.将Employer2类的对象插入到list2中并排序
         //其实原理和上面的二类似,只是没有单独创建MyCompare类,而是用匿名内部类来实现Comparator接口里面的具体比较。
         Employer2 a2 = new Employer2();
         Employer2 b2 = new Employer2();
         Employer2 c2 = new Employer2();
         a2.setName("a2");   a2.setAge(66);
         b2.setName("b2");   b2.setAge(33);
         c2.setName("b2");   c2.setAge(22);
         list2.add(a2);
         list2.add(b2);
         list2.add(c2); //Collections类的sort方法要求传入的第二个参数是一个已实现Comparator接口的比较器
         Collections.sort(list2,new Comparator<Employer2>(){
             @Override
             public int compare(Employer2 a2, Employer2 b2) {
                 return a2.getOrder().compareTo(b2.getOrder());
             }

         });

         //四.将Employer3类的对象插入到list3中并排序
         //被排序的类Employer3实现了Comparable接口,在类Employer3中通过重载compareTo方法来实现具体的比较。
         Employer3 a3 = new Employer3();
         Employer3 b3 = new Employer3();
         Employer3 c3 = new Employer3();
         a3.setName("a3");   a3.setAge(77);
         b3.setName("b3");   b3.setAge(55);
         c3.setName("b3");   c3.setAge(99);
         list3.add(a3);
         list3.add(b3);
         list3.add(c3);
         Collections.sort(list3);//Collections类的sort方法要求传入的List中的对象是已实现Comparable接口的对象

         System.out.println(listS);
         System.out.println(list1);
         System.out.println(list3);
         System.out.println(list2);
     }
 }
 class Employer1{
     private String name;
     private Integer age;
     public void setName(String name) {
         this.name = name;
     }
     public Integer getAge() {
         return age;
     }
     public void setAge(Integer age) {
         this.age = age;
     }
     @Override//重载了Object类里的toString方法,使之可以按照我们要求的格式打印
     public String toString() {
         return "name is "+name+" age is "+ age;
     }
 }
 class MyCompare implements Comparator<Employer1> {
     @Override//重载了Comparator接口里面的compare方法实现具体的比较
     public int compare(Employer1 o1, Employer1 o2) {
         return o1.getAge().compareTo(o2.getAge());
     }
 }
 class Employer2{
     private String name;
     private Integer age;
     public void setName(String name) {
         this.name = name;
     }
     public Integer getOrder() {
         return age;
     }
     public void setAge(Integer age) {
         this.age = age;
     }
     @Override//重载了Object类里的toString方法,使之可以按照我们要求的格式打印
     public String toString() {
         return "name is "+name+" age is "+age;
     }
 }
 class Employer3 implements Comparable<Employer3>{
     private String name;
     private Integer age;
     public void setName(String name) {
         this.name = name;
     }
     public Integer getAge() {
         return age;
     }
     public void setAge(Integer age) {
         this.age = age;
     }
     @Override//重载了Object类里的toString方法,使之可以按照我们要求的格式打印
     public String toString() {
         return "name is "+name+" age is "+age;
     }
     @Override//重载了Comparable接口里的compareTo方法来实现具体的比较
     public int compareTo(Employer3 a) {
         return this.age.compareTo(a.getAge());
     }
 }

打印的结果为:

[2, 5, 9]
[name is b1 age is 33, name is a1 age is 44, name is b1 age is 55]
[name is b3 age is 55, name is a3 age is 77, name is b3 age is 99]
[name is b2 age is 22, name is b2 age is 33, name is a2 age is 66]

★compareTo()小结

  由上面的程序我们可以看出,无论是实现了Comparable接口的方法还是实现了Comparator接口的方法,最终比较的返回值都是通过compareTo方法实现的,故就把compareTo方法单独拿出来做个小结。

  compareTo()的返回值是整型,它是先比较对应字符的大小(ASCII码顺序),如果第一个字符和参数的第一个字符不等,结束比较,返回他们之间的差值,如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个字符做比较,以此类推,直至比较的字符或被比较的字符有一方全比较完,这时就比较字符的长度。例如:

 String s1 = "abc";
 String s2 = "abcd";
 String s3 = "abcdfg";
 String s4 = "1bcdfg";
 String s5 = "cdfg";
 System.out.println( s1.compareTo(s2) ); // -1 (前面相等,s1长度小1)
 System.out.println( s1.compareTo(s3) ); // -3 (前面相等,s1长度小3)
 System.out.println( s1.compareTo(s4) ); // 48 ("a"的ASCII码是97,"1"的的ASCII码是49,所以返回48)
 System.out.println( s1.compareTo(s5) ); // -2 ("a"的ASCII码是97,"c"的ASCII码是99,所以返回-2)

2. shuffle

对集合进行随机排序

 public static void shuffle(List<?> list)

 public static void shuffle(List<?> list, Random rnd)

示例:

 public class Practice {
     public static void main(String[] args){
         List c = new ArrayList();
         c.add("w");
         c.add("o");
         c.add("r");
         c.add("l");
         c.add("d");
         System.out.println(c);
         Collections.shuffle(c);
         System.out.println(c);
         Collections.shuffle(c);
         System.out.println(c);
     }
 }

运行结果为:

[w, o, r, l, d]
[l, d, w, o, r]
[o, r, d, l, w]

3. binarySearch

查找指定集合中的元素,返回所查找元素的索引

 public static <T> int binarySearch(List<? extends Comparable<? super T>> list,
                                    T key)

 public static <T> int binarySearch(List<? extends T> list,
                                    T key,
                                    Comparator<? super T> c)

示例:

 public class Practice {
     public static void main(String[] args){
         List c = new ArrayList();
         c.add("w");
         c.add("o");
         c.add("r");
         c.add("l");
         c.add("d");
         System.out.println(c);
         int m = Collections.binarySearch(c, "o");
         System.out.println(m);
     }
 }

运行结果为:[w, o, r, l, d]
注意:若查找的元素不存在,示例中的n即表示该元素最有可能存在的位置的索引。

4. max

 public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)

 public static <T> T max(Collection<? extends T> coll,
                         Comparator<? super T> comp)

前者采用Collection内含自然比较法,后者采用Comparator进行比较.

5. min

 public static <T extends Object & Comparable<? super T>> T min(Collection<? extends T> coll)

 public static <T> T min(Collection<? extends T> coll,
                         Comparator<? super T> comp)

前者采用Collection内含自然比较法,后者采用Comparator进行比较。

6. indexOfSubList

查找subList在list中首次出现位置的索引

 public static int indexOfSubList(List<?> source,
                                  List<?> target)

示例:

 public class Practice {
   public static void main(String[] args){
     List list = Arrays.asList("one two three four five six siven".split(" "));
     System.out.println(list);
     List subList = Arrays.asList("three four five six".split(" "));
     System.out.println(Collections.indexOfSubList(list, subList));
   }
 }

运行结果为:[one, two, three, four, five, six, siven]

7. lastIndexOfSubList

使用与上例方法的使用相同,在此就不做介绍了。

8. replaceAll

替换批定元素为某元素,若要替换的值存在刚返回true,反之返回false

 public static <T> boolean replaceAll(List<T> list,
                                      T oldVal,
                                      T newVal)

示例:

 public class Practice {
   public static void main(String[] args){
     List list = Arrays.asList("one two three four five six siven".split(" "));
     System.out.println(list);
     List subList = Arrays.asList("three four five six".split(" "));
     System.out.println(Collections.replaceAll(list, "siven", "siven eight"));
     System.out.println(list);
   }
 }

运行结果为:
[one, two, three, four, five, six, siven]
true
[one, two, three, four, five, six, siven eight]

9. reverse()

反转集合中元素的顺序

public static void reverse(List<?> list)

示例:

 public class Practice {
   public static void main(String[] args){
     List list = Arrays.asList("one two three four five six siven".split(" "));
     System.out.println(list);
     Collections.reverse(list);
     System.out.println(list);
   }
 }

运行结果为:
[one, two, three, four, five, six, siven]
[siven, six, five, four, three, two, one]

10. rotate

集合中的元素向后移m个位置,在后面被遮盖的元素循环到前面来

 public static void rotate(List<?> list,
                           int distance)

示例:

 public class Practice {
   public static void main(String[] args){
     List list = Arrays.asList("one two three four five six siven".split(" "));
     System.out.println(list);
     Collections.rotate(list, 1);
     System.out.println(list);
   }
 }

运行结果为:
[one, two, three, four, five, six, siven]
[siven, one, two, three, four, five, six]

11. copy

将集合n中的元素全部复制到m中,并且覆盖相应索引的元素

 public static <T> void copy(List<? super T> dest,
                             List<? extends T> src)

示例:

 public class Practice {
   public static void main(String[] args){
     List m = Arrays.asList("one two three four five six siven".split(" "));
     System.out.println(m);
     List n = Arrays.asList("我 是 复制过来的哈".split(" "));
     System.out.println(n);
     Collections.copy(m,n);
     System.out.println(m);
   }
 }

运行结果为:

[one, two, three, four, five, six, siven]
[我, 是, 复制过来的哈]
[我, 是, 复制过来的哈, four, five, six, siven]

12. swap

交换集合中指定元素索引的位置

 public static void swap(List<?> list,
                         int i,
                         int j)

示例:

 public class Practice {
   public static void main(String[] args){
     List m = Arrays.asList("one two three four five six siven".split(" "));
     System.out.println(m);
     Collections.swap(m, 2, 3);
     System.out.println(m);
   }
 }

运行结果为:
[one, two, three, four, five, six, siven]
[one, two, four, three, five, six, siven]

13. fill

用对象o替换集合list中的所有元素

 public static <T> void fill(List<? super T> list,
                             T obj)

示例:

 public class Practice {
   public static void main(String[] args){
     List m = Arrays.asList("one two three four five six siven".split(" "));
     System.out.println(m);
     Collections.fill(m, "haha52T25xixi");
     System.out.println(m);
   }
 }

运行结果为:
[one, two, three, four, five, six, siven]
[haha52T25xixi, haha52T25xixi, haha52T25xixi, haha52T25xixi, haha52T25xixi, haha52T25xixi, haha52T25xixi]

14. nCopies

返回大小为n的List,List不可改变,其中的所有引用都指向o

 public static <T> List<T> nCopies(int n,
                                   T o)

示例:

 public class Practice {
   public static void main(String[] args){
     System.out.println(Collections.nCopies(5, "haha"));
   }
 }

运行结果为:
[haha, haha, haha, haha, haha]

参考:http://www.360doc.com/content/14/0829/10/15242507_405537400.shtml

Collections类常用方法总结的更多相关文章

  1. Java API —— Collections类

    1.Collections类概述         针对集合操作 的工具类,都是静态方法   2.Collections成员方法         public static <T> void ...

  2. Java基础知识强化之集合框架笔记68:Collections类概述和成员方法(备注:Collection 和 Collections区别)

    1. Collections类概述: 针对集合操作的工具类,都是静态方法.  2. Collection 和 Collections的区别: Collections是个java.util下的类,它包含 ...

  3. linkin大话数据结构--Collections类

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

  4. java File类常用方法

    file类常用方法 delete()删除此抽象路径名表示的文件和目录. equals()测试此抽象路径名与给定对象是否相等. exists()测试此抽象路径名表示的文件或目录是否存在. getName ...

  5. 第一章 Collections 类、泛型类和Timing类概述

    摘抄<数据结构与算法(C#语言描述)> 删除很多废话 1.1群集(collection)的定义 群集是一种结构化的数据类型.存储数据,并且提供数据的添.删.改操作,以及对群集不同属性值的设 ...

  6. python第三天---collections类

    collection系列 1.计数器(counter) Counter是对字典类型的补充,用于追踪值的出现次数. 我们从中挑选一些相对常用的方法来举例: 在上面的例子我们可以看出,counter方法返 ...

  7. Thread类常用方法

    Thread类构造方法: 1.Thread(): 2.Thread(String name): 3.Thread(Runable r): 4.Thread(Runable r, String name ...

  8. Java 中的 String 类常用方法

    字符串广泛应用在Java编程中,在Java中字符串属于对象,String 类提供了许多用来处理字符串的方法,例如,获取字符串长度.对字符串进行截取.将字符串转换为大写或小写.字符串分割等. Strin ...

  9. Collections类解析

    最常用的排序: 需要实现Comparable接口 1.什么是Comparable接口 此接口强行对实现它的每个类的对象进行整体排序.此排序被称为该类的自然排序 ,类的 compareTo 方法被称为它 ...

随机推荐

  1. PHP的魔法方法__set() __get()

    php的魔法方法__set()与__get() Tags: PHP 我们先来看看官方的文档如何定义他们的: public void __set(string $name, mixed $value); ...

  2. IIS安装

    引自:http://www.cnblogs.com/Joans/archive/2012/07/16/2593828.html

  3. 复制物料(参考的MMCC想法)

    MMCC这个事务码没用过,也是才听到的,都是业务搞起来的...然后感觉这个东西有点意思,就搞搞咯 网上找的一篇文章,自己修改的.改了默认收货工厂为创建时的工厂,因为这边一直报收货工厂必输...不管是不 ...

  4. python之路-Day8

    抽象接口 class Alert(object): '''报警基类''' def send(self): raise NotImplementedError class MailAlert(Alert ...

  5. SQL 报错信息整理及解决方案(持续更新)

    整理一下自己遇见过的 SQL 各种报错信息及相应解决方法,方便以后查阅,主要平台为 Oracle: ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值: 原因:插入操作时,数据大于字段 ...

  6. linux 命令案例学习——文件搜索

    两个搜索文件的工具 locate  ——仅仅通过文件名查找文件 find     ——依据文件的各种属性在既定目录(包括子目录)里查找 一个通常与文件搜索命令一起使用.处理搜索结果文件列表的命令 xa ...

  7. Hadoop ecosystem

    How did it all start- huge data on the web! Nutch built to crawl this web data Huge data had to save ...

  8. 使用Unity拦截一个返回Task的方法

    目标 主要是想为服务方法注入公用的异常处理代码,从而使得业务代码简洁.本人使用Unity.Interception主键来达到这个目标.由于希望默认就执行拦截,所以使用了虚方法拦截器.要实现拦截,需要实 ...

  9. 【Linux远程管理】Telnet远程连接管理

    Telnet,命令行界面下的远程管理工具,因为其历史非常悠久,几乎所有的操作系统都有该工具, 但是,Telnet在传输数据是是通过明文传输的,没有加密,所以现在几乎不会使用Telnet进行管理了. ( ...

  10. 经典sql(3)

    描述:有两个表A 和B ,均有key 和value 两个字段,如果B 的key 在A 中也有,就把B 的value 换为A 中对应的value 表B此处为tbaley的情况:      A: tabl ...