对集合中的元素进行排序,接口Comparator<T>和Comparable<T>的使用

关于比较排序比较的接口 或者是类有:java.lang.Comparable<T>接口,

一个抽象类通过实现这个接口可以进行自然排序,也就是一个如果一个自定义类通过implements关键字实现Comparable<T>接口,并且要重写这个接口中的CompareTo()抽象方法,可以再这个方法中定义自己的比较规则;然后再向集合对象中添加元素的时候,就会自动调用compareTo()方法,对集合中的元素进行排序。

对于实现这个接口的类的对象,可以使用Collections类中的静态方法,sort()进行自动排序。

public class Student implements Comparable<Student> {

private String name;

private int age;

public int compareTo(Student o) {

int num = this.age-o.age;

return num==0 ? this.name.compareTo(o.name): num;

}

在main()方法中可以使用:

TreeSet<Student> ts = new TreeSet<>();

ts.add(new Student("张三",23));

ts.add(new Student("赵琪",23));

ts.add(new Student("李四",32));

ts.add(new Student("王五",78));

ts.add(new Student("赵六",26));

System.out.println(ts);

实现对添加到TreeSet集合中的元素进行排序。

还有一中实现集合中的元素进行排序的方法:另外自定义一个比较器类实现Comparator<T>接口,然后在这个比较器类中重写compare()方法,在这个方法中定义自己的比较规则;在需要使用的时候可以将一个比较器的对象(也就是Comparator<T>接口的子类对象,可以使用匿名内部类实现)传给集合的构造方法,再向集合中添加元素的时候就可以实现对集合中的元素进行排序。

实例:

定义一个比较器:

class CompareByLen implements Comparator<String>{//比较器

@Override

public int compare(String o1, String o2) {

//比较字符串的长度

int num = o1.length() - o2.length();

//如果字符串的长度相同,就按照字母的顺序比较

return num == 0 ? o1.compareTo(o2) : num;

}

在main()方法中可以通过:

TreeSet<String> ts = new TreeSet<>(new CompareByLen());

ts.add("ffffff");

ts.add("a");

ts.add("ef");

ts.add("gan");

ts.add("rs");

System.out.println(ts);

实现对要添加到集合中的元素进行排序。

这种方法就是—比较器方法。

Java.util.Comparator<T>

原文地址:https://www.cnblogs.com/nesnes/p/9867622.html

时间: 2024-10-28 21:35:45

对集合中的元素进行排序,接口Comparator<T>和Comparable<T>的使用的相关文章

2018.9.26 如何对List集合中的元素进行排序?

Collections对List集合中的数据进行排序 有时候需要对集合中的元素按照一定的规则进行排序,这就需要用到 Java中提供的对集合进行操作的工具类Collections,其中的sort方法 先看一个简单的例子: [java] view plain copy public static void main(String[] args) { List nums = new ArrayList(); nums.add(3); nums.add(5); nums.add(1); nums.add

黑马程序员——java——自定义一个比较器,对TreeSet 集合中的元素按指定方法来排序

自定义一个比较器,对TreeSet 集合中的元素按指定方法来排序 import java.util.Comparator; import java.util.Iterator; import java.util.TreeSet; //自定义一个比较器 class Mycompare implements Comparator { @Override public int compare(Object o1, Object o2) { // TODO Auto-generated method s

对list集合中的对象进行排序(转载)

原文链接:http://blog.csdn.net/veryisjava/article/details/51675036 Collections对List集合中的数据进行排序 有时候需要对集合中的元素按照一定的规则进行排序,这就需要用到 Java中提供的对集合进行操作的工具类Collections,其中的sort方法 先看一个简单的例子: public static void main(String[] args) { List<Integer> nums = new ArrayList&l

java中对List中的元素进行排序

Collections对List集合中的数据进行排序 有时候需要对集合中的元素按照一定的规则进行排序,这就需要用到 Java中提供的对集合进行操作的工具类Collections,其中的sort方法 先看一个简单的例子: 1 public static void main(String[] args) { 2 List<Integer> nums = new ArrayList<Integer>(); 3 nums.add(2); 4 nums.add(9); 5 nums.add(

qsort 函数的使用——对普通数组、指针数组、二维数组中的元素进行排序

在ANSI C中,qsort函数的原型是 #include <stdlib.h> void qsort(void *base, size_t nmemb, size_t size, int (*compar) (const void *, const void *)); 解释:qsort函数对含有nmemb个元素的数组进行排序,而base指针指向数组的第一个元素.这个数组的元素个数由size指定. compar函数对qsort的比较操作进行定义,所以可以定制数字的比较,字符串的比较,甚至结构体

判断数组或者集合中重复元素的个数。

当我们需要对数组或者集合中的元素进行重复元素个数时,我们不妨使用map来完成此操作. 由于map中key是唯一的,所以利用这一特性就可以对数组中重复元素进行统计. java实现代码如下. String[] names={"a","b","a","b","c"}; Map<String,Integer> sameElement=new HashMap<String,Integer>()

一个关于集合的问题,为什么添加进List集合中的元素被莫名其妙的改变了

以前自己理解的不够深刻,特此记录一下提醒自己,如果正好也帮到了你,我会很开心.相信只有自己正好遇到这个问题,才觉得哦,原来这样.自己小白,大神莫喷 为什么添加进List集合中的元素被莫名其妙的改变了? import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; public class Demo { /** * @param args */ pu

javascript sort()对数组中的元素进行排序

javascript sort()可以对数组中的元素进行排序, 语法格式:arrayObject.sort(sortby) arrayObject是数组对象,sortby为可选项,用来确定元素顺序的函数的名称,如果这个参数被省略,那么元素将按照ASCII字符顺序进行升序排列. 在没有使用比较函数进行排序时,sort方法是按字符的ASCII值进行排序的,先从第一个字符比较,如果第一个字符相等,再比较第二个字符,以此类推. 对于数值型数据,如果按照字符比较,得到的结果可能并不是我们想要的,因此需要借

如何删除JAVA集合中的元素

经常我们要删除集合中的某些元素.有些可能会这么写. public void operate(List list){ for (Iterator it = list.iterator(); it.hasNext();) { String str = (String)it.next(); if (str.equals("chengang")){ list.remove(str); } } } 这种写法一运行就会报如下异常: Exception in thread "main&qu