Java集合中用Collections排序

Collections简介及常用功能

java.util.Collections是集合工具类,用来对集合进行操作。

部分主要方法如下:

public static void reverse(List<?> list) 反转指定list中的顺序。

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;

public class CollectionsDemo01 {
    public static void main(String[] args) {
        ArrayList<String > list = new ArrayList<String>();
        list.add("你好么");
        list.add("谢谢");
        list.add("我很好");
        Collections.reverse(list);
        Iterator iter = list.iterator();
        while(iter.hasNext()) {
            System.out.println(iter.next());
        }
    }
}

计算结果:

我很好
谢谢
你好么

public static <T> boolean addAll(Collection<? super T> c, T... elements)往集合中添加一些元素。添加的元素可能是数组或者单个元素。

源码如下:

    @SafeVarargs
    public static <T> boolean addAll(Collection<? super T> c, T... elements) {
        boolean result = false;
        for (T element : elements)
            result |= c.add(element);
        return result;
    }
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;

public class CollectionsDemo01 {
    public static void main(String[] args) {
        ArrayList<String > list = new ArrayList<String>();
        list.add("你好么");
        list.add("谢谢");
        list.add("我很好");

        Iterator iter = list.iterator();
        while(iter.hasNext()) {
            System.out.println(iter.next());
        }
        System.out.println("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
        String[] str = {"我来自哪里","我是谁"};
        Collections.addAll(list,str);
        for (String s : list) {
            System.out.println(s);
        }
    }
}

运行结果:

你好么
谢谢
我很好
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
你好么
谢谢
我很好
我来自哪里
我是谁

 

public static void swap(List<?> list, int i, int j) :交换集合中指定两个下标元素位置。

import java.util.ArrayList;
import java.util.Collections;


public class CollectionsDemo01 {
    public static void main(String[] args) {
        ArrayList<String > list = new ArrayList<String>();
        list.add("你好么");
        list.add("谢谢");
        list.add("我很好");

        Collections.swap(list,1,2);
        for (String s : list) {
            System.out.println(s);
        }
    }
}

运行结果:

你好么
我很好
谢谢

public static <T extends Comparable<? super T>> void sort(List<T> list)集合list继承Comparable后根据compareTo方法排序

import java.util.ArrayList;
import java.util.Collections;


public class CollectionsDemo01 {
    public static void main(String[] args) {
        ArrayList<Student > list = new ArrayList<Student>();
        list.add(new Student("张三",18));
        list.add(new Student("李四",15));
        list.add(new Student("王二",19));
        list.add(new Student("麻子",18));

        Collections.sort(list);
        for (Student s : list) {
            System.out.println(s);
        }
    }
}

class Student implements Comparable<Student>{
    private String name;
    private int age;
    //按照年龄大小排序
    @Override
    public int compareTo(Student s) {
        if (s.age == this.age) {
            return 0;
        } else if(s.age > this.age){
            return 1;
        }
        return -1;
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

}

运行结果:

Student{name='王二', age=19}
Student{name='张三', age=18}
Student{name='麻子', age=18}
Student{name='李四', age=15}

 

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

:将集合中元素按照指定规则排序。

package task03;


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


public class CollectionsDemo01 {
    public static void main(String[] args) {
        ArrayList<Student> list = new ArrayList<Student>();
        list.add(new Student("张三",18));
        list.add(new Student("李四",15));
        list.add(new Student("王二",19));
        list.add(new Student("麻子",18));

        Collections.sort(list,Comparator.comparing(Student::getAge));
        for (Student s : list) {
            System.out.println(s);
        }
    }
}

class Student implements Comparator<Student> {
    private String name;
    private int age;
    //按照年龄大小排序
    @Override
    public int compare(Student o1, Student o2) {
        if (o1.age == o2.age) {
            return 0;
        } else if (o1.age > o2.age) {
            return 1;
        }
        return -1;
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

运行结果:

Student{name='李四', age=15}
Student{name='张三', age=18}
Student{name='麻子', age=18}
Student{name='王二', age=19}


Comparable和Comparator两个接口的区别。

Comparable:强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的
compareTo方法被称为它的自然比较方法。只能在类中实现compareTo()一次,不能经常修改类的代码
实现自己想要的排序。实现此接口的对象列表(和数组)可以通过Collections.sort(和Arrays.sort)进
行自动排序,对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。
Comparator:强行对某个对象进行整体排序。可以将Comparator 传递给sort方法(如Collections.sort
或 Arrays.sort),从而允许在排序顺序上实现精确控制。还可以使用Comparator来控制某些数据结构
(如有序set或有序映射)的顺序,或者为那些没有自然顺序的对象collection提供排序。
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值