JAVA-对Collections类的总结

目录

一、Collections类概述

二、Collections类的常用方法

1、打乱集合顺序shuffle方法(使用默认的随机源随机排列指定的列表)

2、将指定列表按升序排列sort方法

sort方法的实现

1、第一种使用sort方法的方式是:Comparable 排序接口

2、通过Comparator比较器接口来实现

三、Collections类中的其他方法


一、Collections类概述

  • Collections类作为集合类的工具类,与数组的工具类Arrays类似

  • 用来处理集合,里面包含的都是静态方法

其实对于Collections类来说,是很好理解的,就是集合的工具类,和Arrays类似,但是有一些注意事项是值得我们注意的!

注意:

1、首先我们要注意的就是:Collections类和Collection接口的区分,他们两个之间只有一个字母的差别,但是一个是集合的父类接口一个是集合的工具类。要注意区分。

2、其次就是,Collections类并不是Collection的实现类,在api中它并没有实现Collection接口。

3、Colllections类它本身是存在构造方法的,但是它的构造方法是被private修饰的,所以我们不能通过new关键字来创建它的对象。

4、正是因为它的构造方法被private修饰了,所以在Collections类中,它的所有的方法都是静态方法,我们可以通过类名去直接调用它们!

下面我们就来看看Cllocetions中有哪些常用的方法!

二、Collections类的常用方法

1、打乱集合顺序shuffle方法(使用默认的随机源随机排列指定的列表)

此方法是Collections类中比较简单的一个方法,其作用就是将有序的list集合进行随机排序,也正是因为这样所以此方法不支持对本身就无序的Set集合使用。

代码实现如下:

public class Demo01 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("A1");
        list.add("A2");
        list.add("A3");
        list.add("A4");
        list.add("A5");

        System.out.println("list = " + list);
        Collections.shuffle(list);
        System.out.println("list = " + list);


        //Set集合,
        HashSet<String> set = new HashSet<>();
        //Collections.shuffle(set);无法对Set集合进行乱序
    }
}

2、将指定列表按升序排列sort方法

这就是Collections类中比较重要的一个方法了,Collections类中的sort方法,其本身其实就是Arrays类中的sort方法。我们去去源码中看一看就知道了

点开Collections.sort就会看到

再点进去,注意看:先转成object数组,然后利用Arrays.sort进行排序

 了解了Collections类中的sort方法以后,我们来看一看怎么实现我们的sort方法

sort方法的实现

1、第一种使用sort方法的方式是:Comparable 排序接口

若一个类实现了Comparable接口,就意味着“该类支持排序”。 
假设“有一个List列表(或数组),里面的元素是实现了Comparable接口的类”,则该List列表(或数组)可以通过 Collections.sort(或 Arrays.sort)进行排序。
此外,“实现Comparable接口的类的对象”可以用作“有序映射(如TreeMap)”中的键或“有序集合(TreeSet)”中的元素,而不需要指定比较器。
代码如下:

public static void main(String[] args){
	List c = new ArrayList();
	c.add("l");
	c.add("o");
	c.add("v");
	c.add("e");
	System.out.println(c);//-->love
	Collections.sort(c);
	System.out.println(c);//-->elov
}

所以这里又有一个很重要的注意事项!

如果想要使用sort方法进行排序,条件是:集合中的类型T必须是Comparable的子类型。 也就是说集合中所存储的数据类型的类必须要实现Comparable接口

这里我们可以去api中看一下,比如我们常用的String类就实现了Comparable接口

 

那么当集合中存储的数据是我们自己创建的类时,我们想要使用sort方法,那么我们也要将我们创建的类去实现Comparable接口,同时重写compareTo(T o);方法!

那么要如何重写compareTo(T o);方法呢?

代码如下:

​
 public int compareTo(T o); //抽象方法
//子类实现后,需要进行重写

返回值int,只关心正负或者0,不需要关系具体值
  
原始排序:this【我】  o【他】
如果要升序排序:我减他
如果要降序排序:他-我
    
public class Kehu implements Comparable<Kehu> {
    private String name;
    private double assets;
    @Override
    public int compareTo(Kehu o) {
        return (int) (o.assets-this.assets);//降序排列
      //return (int) (this.assets-o.assets);//升序排列
    }
}

​

那么当我们集合中存储的元素的类型没有实现我们的Comparable接口是,我们该怎么办呢,难道就没有办法使用sort方法了吗?肯定不是的,所以我们还有第二种使用sort方法的方式!

2、通过Comparator比较器接口来实现

我们若需要控制某个类的次序,而该类本身不支持排序(即没有实现Comparable接口);我们可以建立一个“比较器”来进行排序。这个“比较器”只需要实现Comparator接口即可。

Collections.sort(list, new PriceComparator())

这就创建了一个比较器,其中需要传入的两个参数分别是:

参数一:需要排序的list
参数二:比较器,实现Comparator接口的类,返回一个int型的值,就相当于一个标志,告诉sort方法按什么顺序来对list进行排序。
Comparator是个接口,可重写compare()及equals()这两个方法,用于比较功能;如果是null的话,就是使用元素的默认顺序,如a,b,c,d,e,f,g,就是a,b,c,d,e,f,g这样,当然数字也是这样的。
 
compare(a,b)方法:根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数。
equals(obj)方法:仅当指定的对象也是一个 Comparator,并且强行实施与此 Comparator 相同的排序时才返回 true。

代码实现如下:

public static void main(String[] args) {
  List<String> list = new ArrayList<String>();
  list.add("beijing");
  list.add("shanghai");
  list.add("hangzhou");
  Collections.sort(list, new Comparator<String>() {
      public int compare(String str1, String str2) {
      /**
      * 升序排的话就是第一个参数.compareTo(第二个参数);
      * 降序排的话就是第二个参数.compareTo(第一个参数);
      */
      // 按首字母升序排
      // return str1.compareTo(str2);
      // 按第二个字母升序排
      char c1 = str1.charAt(1);
      char c2 = str2.charAt(1);
      return c1 - c2; //c2 - c1则返回按第二个字母降序排序
    }
  });
  System.out.println(list);
}

 当然Collections类中还有很多的静态方法,这里就不一一赘述了,想要了解的话,我们可以去api中查看

三、Collections类中的其他方法

1.reverse()方法的使用:反转集合中元素的顺序

2.shuffle(Collection)方法的使用:对集合进行随机排序。

3.fill(List list, Object o)方法的使用(含义:用对象o替换集合list中的所有元素)

4.copy(List m, List n)方法的使用(含义:将集合n中的元素全部复制到m中,并且覆盖相应索引的元素)。

5.min(Collection),min(Collection, Comparator)方法的使用(前者采用Collection内含自然比较法,后者采用Comparator进行比较)。

6.max(Collection),max(Collection, Comparator)方法的使用(前者采用Collection内含自然比较法,后者采用Comparator进行比较)。

7.indexOfSubList(List list, List subList)方法的使用(含义:查找subList在list中首次出现位置的索引)。

8.lastIndexOfSubList(List source, List target)方法的使用与上例方法的使用相同

9.rotate(List list, int m)方法的使用(含义:集合中的元素向后移m个位置,在后面被遮盖的元素循环到前面来)。移动列表中的元素,负数向左移动,正数向右移动

10.swap(List list, int i, int j)方法的使用(含义:交换集合中指定元素索引的位置)

11.binarySearch(Collection, Object)方法的使用(含义:查找指定集合中的元素,返回所查找元素的索引)。

12.replaceAll(List list, Object old, Object new)方法的使用(含义:替换批定元素为某元素,若要替换的值存在刚返回true,反之返回false)。
 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值