Comparator和Comparable比较

当需要排序的集合或数组不是单纯的数字型时,通常可以使用Comparator或 Comparable,以简单的方式实现对象排序或自定义排序。

一、Comparator

强行对某个对象collection进行整体排序的比较函数,可以将Comparator传 递给Collections.sort或Arrays.sort。

接口方法:

1 /** *//**
2  * @return o1小于、等于或大于o2,分别返回负整数、零或正整数。
3  */
4 int compare(Object o1, Object o2);案例:
1import java.util.Arrays;
2import java.util.Comparator;
3
4public class SampleComparator implements Comparator {
5
6 public int compare(Object o1, Object o2) {
7  return toInt(o1) - toInt(o2);
8 }
9
10 private int toInt(Object o) {
11  String str = (String) o;
12  str = str.replaceAll("一", "1");
13  str = str.replaceAll("二", "2");
14  str = str.replaceAll("三", "3");
15  return Integer.parseInt(str);
16 }
17
18 /** *//**
19  * 测试方法
20  */
21 public static void main(String[] args) {
22  String[] array = new String[] { "一二", "三", "二" };
23  Arrays.sort(array, new SampleComparator());
24  for (int i = 0; i < array.length; i++) {
25   System.out.println(array[i]);
26  }
27 }
28
29}

二、Comparable

强行对实现它的每个类的对象进行整体排序,实现此接口的对象列表(和数 组)可以通过Collections.sort或Arrays.sort进行自动排序。

接口方法:

1 /** *//**
2  * @return 该对象小于、等于或大于指定对象o,分别返回负整数、零或 正整数。
3  */
4 int compareTo(Object o);假设对象User,需要按年龄排序:
1public class User {
2
3 private String id;
4 private int age;
5
6 public User(String id, int age) {
7  this.id = id;
8  this.age = age;
9 }
10
11 public int getAge() {
12  return age;
13 }
14
15 public void setAge(int age) {
16  this.age = age;
17 }
18
19 public String getId() {
20  return id;
21 }
22
23 public void setId(String id) {
24  this.id = id;
25 }
26
27}

时间: 2024-11-27 22:24:54

Comparator和Comparable比较的相关文章

java集合中Comparable和Comparator辨析

一.Comparable和Comparator简介 在对集合元素进行比较时一般使用TreeSet.对于简单的数据类型,TreeSet可以直接进行比较.但是对于复杂的数据类型,比如自己定义的数据类型或者类,就需要自己设置比较方法与比较规则了,这时就需要使用Comparable和Comparator. Comparable和Comparator都是用来实现集合中的排序的,只是Comparable是在集合内部定义的方法实现排序,而Comparator是在集合外部实现的排序.所以如果想对结合排序,需要在

Java 中Comparable 和 Comparator的比较

本文,先介绍Comparable 和Comparator两个接口,以及它们的差异:接着,通过示例,对它们的使用方法进行说明. Comparable 简介 Comparable 是排序接口. 若一个类实现了Comparable接口,就意味着"该类支持排序".  即然实现Comparable接口的类支持排序,假设现在存在"实现Comparable接口的类的对象的List列表(或数组)",则该List列表(或数组)可以通过 Collections.sort(或 Array

comparator接口与Comparable接口的区别

Comparable & Comparator 都是用来实现集合中元素的比较.排序的,只是 Comparable 是在集合内部定义的方法实现的排序,Comparator 是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义 Comparator 接口的方法或在集合内实现 Comparable 接口的方法. Comparator位于包java.util下,而Comparable位于包   java.lang下 Comparable 是一个对象本身就已经支持自比较所需要实现的接口(如 St

对比Java中的Comparable排序接口和Comparator比较器接口_java

ComparableComparable 是排序接口. 若一个类实现了Comparable接口,就意味着"该类支持排序". 即然实现Comparable接口的类支持排序,假设现在存在"实现Comparable接口的类的对象的List列表(或数组)",则该List列表(或数组)可以通过 Collections.sort(或 Arrays.sort)进行排序. 此外,"实现Comparable接口的类的对象"可以用作"有序映射(如TreeM

浅析Java中comparator接口与Comparable接口的区别_java

Comparable 简介 Comparable 是排序接口. 若一个类实现了Comparable接口,就意味着"该类支持排序".  即然实现Comparable接口的类支持排序,假设现在存在"实现Comparable接口的类的对象的List列表(或数组)",则该List列表(或数组)可以通过 Collections.sort(或 Arrays.sort)进行排序. 此外,"实现Comparable接口的类的对象"可以用作"有序映射(如

Comparable Comparator具体区别

问题描述 Comparable Comparator在对对象排序上具体是什么区别???不要说什么俩个接口里的方法不一样什么我是问具体排序上俩个有区别么???还有个问题:JavaEye怎么拿分???新注册的就这么几分问俩次问题就光了新手又不会帮人家解决问题哪里弄分??? 解决方案 当需要排序的集合或数组不是单纯的数字型时,通常可以使用Comparator或Comparable,以简单的方式实现对象排序或自定义排序.一.Comparator强行对某个对象collection进行整体排序的比较函数,可

Java中实现Comparable和Comparator对象比较_java

当需要排序的集合或数组不是单纯的数字型时,通常可以使用Comparator或Comparable,以简单的方式实现对象排序或自定义排序. A comparison function, which imposes a total ordering on some collection of objects. Comparators can be passed to a sort method (such as Collections.sort or Arrays.sort) to allow pr

Java 中Comparable和Comparator区别比较_java

Comparable 简介Comparable 是排序接口.若一个类实现了Comparable接口,就意味着"该类支持排序".  即然实现Comparable接口的类支持排序,假设现在存在"实现Comparable接口的类的对象的List列表(或数组)",则该List列表(或数组)可以通过 Collections.sort(或 Arrays.sort)进行排序.此外,"实现Comparable接口的类的对象"可以用作"有序映射(如Tre

TreeMap cannot be cast to java.lang.Comparable

    /** * Constructs a new, empty tree map, using the natural ordering of its * keys. All keys inserted into the map must implement the {@link * Comparable} interface. Furthermore, all such keys must be * <i>mutually comparable</i>: <tt>