java中comparable接口与comparator接口的区别,&&请求代码示例,非常谢谢

请求代码示例,谢谢... 请求代码示例,谢谢 展开
 我来答
素爱小子2
2014-04-17 · TA获得超过268个赞
知道小有建树答主
回答量:90
采纳率:0%
帮助的人:66.1万
展开全部
数值用比较运算符> < ==等来比较大小,字符串用equals比较内容是否相等。但是对象怎么比较大小呢?用这两接口Comparator和Comparable
两者区别:

Comparator接口在java.util包下,用于提供比较的规则,常和Arrays.sort(对象数组,比较规则);或Collections.sort(集合,比较规则);搭配使用。前面的数组或集合按照后面的比较规则来排序。比较规则是Comparator接口类型的对象,可创建类实现该接口,重写compare方法,在方法体自定义比较规则,价格重量点击率都可以,对参数中传入的两个对象比较,根据返回值o1>o1默认升序排列
Comparable接口在java.lang包下,实现compareTo方法对对象排序,该方法只有一个参数
public int compareTo(Object obj)

对象.obj ==0 对象==obj
对象.obj ==正数 对象>obj
对象.obj ==负数 对象<obj

综上所述:
Comparator常用于提供比较规则,需搭配使用
Comparable:要比较的对象直接实现该接口

例子:使用Comparator接口

package shwg.action;

import java.util.Arrays;
import java.util.Comparator;

//按字符串长度比较对象大小
public class Demo {
public static void main(String[] args) {
String[] names = {"Tom","Jerry","Andy","Lee"};
Arrays.sort(names, new ByLength());
System.out.println(Arrays.toString(names));
}
}
class ByLength implements Comparator<String>{
//只需两个随机对象o1 o2间比较,若compare方法返回正数,
// 会按升序排列(长度由小到大排)
public int compare(String o1, String o2) {
int r = o1.length() - o2.length();
if (r == 0) {
//若长度相等,根据字符串首字母大小比,加上符号是为了首字母按字典顺序排
return -(o1.charAt(0) - o2.charAt(0));
}
return r;
}
}
例子2:使用Comparable接口
package shwg.action;

import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
//注意:只要实现Comparable接口里面的compareTo方法,那么该方法会被自动调用
public class Name implements Comparable{
private String firstName, lastName;
public Name(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public String toString() {return firstName + " " + lastName;}
//同一个类型的对象比较才有意义,可以用泛型<>约定
public int compareTo(Object o) {
Name a = (Name)o;
//lastName是String类型,已实现Comparable接口,可直接调compareTo方法
//比较时,从首字母往后一个个字母比ASCII值得大小排序
int lastCmp = lastName.compareTo(a.lastName);
//lastName相同比较firstName,将整型值返回
return lastCmp !=0 ? lastCmp : firstName.compareTo(a.firstName);
}
//测试
public static void main(String[] args) {
List l = new LinkedList();
l.add(new Name("Karl", "M"));
l.add(new Name("Steven", "Lee"));
l.add(new Name("Jhon", "O"));
Collections.sort(l);
System.out.println(l);
}
}
我一个一个字打的希望采纳,你可以拿去程序中运行比较。
来自:求助得到的回答
威孚半导体技术
2024-08-19 广告
威孚(苏州)半导体技术有限公司是一家专注生产、研发、销售晶圆传输设备整机模块(EFEM/SORTER)及核心零部件的高科技半导体公司。公司核心团队均拥有多年半导体行业从业经验,其中技术团队成员博士、硕士学历占比80%以上,依托丰富的软件底层... 点击进入详情页
本回答由威孚半导体技术提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式