Comparable和Compartor的区别
1.List对象实现Comparable接口,使对象具备可比性
package tao; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; public class Student1 implements Comparable<Student1> {
private String name;
private Integer age;
public Student1(String name, Integer age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public int compareTo(Student1 o) {
// TODO Auto-generated method stub
return this.getAge().compareTo(o.getAge());
} // 测试方法
public static void main(String[] args) {
List<Student1> list = new ArrayList<Student1>(); Student1 s1 = new Student1("lisi1",);
Student1 s2 = new Student1("lisi3",);
Student1 s3 = new Student1("lisi2",); list.add(s1);
list.add(s2);
list.add(s3); Collections.sort(list); for(Student1 s : list){
System.out.println("name:"+s.getName()+" age:"+s.getAge());
}
}
}
排序结果
name:lisi3 age:
name:lisi1 age:
name:lisi2 age:
2.List对象不具备可比性,或者对象本身可比性不是想要的排序规则,通过Comparator外部比较
package tao; import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List; public class Student2 {
private String name;
private Integer age;
public Student2(String name, Integer age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
} // 测试方法
public static void main(String[] args) {
List<Student2> list = new ArrayList<Student2>(); Student2 s1 = new Student2("lisi1",);
Student2 s2 = new Student2("lisi3",);
Student2 s3 = new Student2("lisi2",); list.add(s1);
list.add(s2);
list.add(s3); Collections.sort(list,new MyCompare()); for(Student2 s : list){
System.out.println("name:"+s.getName()+" age:"+s.getAge());
}
}
} class MyCompare implements Comparator<Object> { @Override
public int compare(Object o1, Object o2) {
// TODO Auto-generated method stub
Student2 s1 = (Student2)o1;
Student2 s2 = (Student2)o2;
return s1.getAge().compareTo(s2.getAge());
}
}
排序结果
name:lisi3 age:
name:lisi1 age:
name:lisi2 age:
3.Comparable和Compartor的区别
a.出处不同
java.util.Comparator;
java.lang.Comparable;
b.提供方法不同
Comparator提供int compare(Object o1, Object o2)
Comparable提供int compareTo(Object o)
c.内外部区别
Comparator提供外部对比
Comparable提供对象自身对比
Comparable和Compartor的区别的更多相关文章
- Java中Comparable和Comparator接口区别分析
Java中Comparable和Comparator接口区别分析 来源:码农网 | 时间:2015-03-16 10:25:20 | 阅读数:8902 [导读] 本文要来详细分析一下Java中Comp ...
- Java中Comparable和Comparator的区别
前言 最近复习遇到了这个问题,在此进行一个详细的记录,分享给大家. 两个接口的区别 包区别 Comparable接口是在java.lang下. Comparator接口是在java.util下. 使用 ...
- Java中Comparable与Comparator的区别
相同 Comparable和Comparator都是用来实现对象的比较.排序 要想对象比较.排序,都需要实现Comparable或Comparator接口 Comparable和Comparator都 ...
- Comparable与Comparator的区别
Java的Comparator和Comparable当需要排序的集合或数组不是单纯的数字型时,通常可以使用Comparator或Comparable,以简单的方式实现对象排序或自定义排序. 一.Com ...
- Comparable和Comparator的区别&Collections.sort的两种用法
在Java集合的学习中,我们明白了: 看到tree,可以按顺序进行排列,就要想到两个接口.Comparable(集合中元素实现这个接口,元素自身具备可比性),Comparator(比较器,传入容器构造 ...
- 面试----java基础集合---------------------comparable和comparator 的区别
comparable接口 是主要是用来自定义类存储在主要是TreeSet,TreeMap(键)集合中存储时,自定通过实现这种接口得到自然排序的功能. comparator 接口 是主要是用来 ...
- 浅谈Comparable与Comparator的区别
平时进行自定义排序一直使用实现Comparable接口,一段时间后操作的时候居然发现有了个Comparator接口 上网差了些资料,总结笔记一下. 基本原理就是比较,底层是二叉树 比如是3,6,5,1 ...
- Comparable 与 Comparator的区别
Comparable & Comparator 都是用来实现集合中元素的比较.排序的,只是 Comparable 是在集合内部定义的方法实现的排序,Comparator 是在集合外部实现的排序 ...
- PAT——1055. 集体照 (比较comparable和comparator的区别)
拍集体照时队形很重要,这里对给定的N个人K排的队形设计排队规则如下: 每排人数为N/K(向下取整),多出来的人全部站在最后一排: 后排所有人的个子都不比前排任何人矮: 每排中最高者站中间(中间位置为m ...
随机推荐
- Android ListView复制、删除的实现
适配器MyAdapter: package com.zihao.adapter; import java.util.List; import com.zihao.popdemo.R; import c ...
- Tomcat启动报错java.net.AbstractPlainSocketImpl(java/net/AbstractPlainSocketImpl.java:178:-1)Struts在网络复杂情况下启动报错解决办法
SSH项目 在网络复杂的情况(具体规律未知)下,Tomcat启动时,报如下错误: [ERROR] 2014-08-12 14:52:58,484 [org.apache.struts2.dispatc ...
- KLEE错误汇报一:One phenomenon after the execution using klee
https://github.com/klee/klee/issues/649#issuecomment-300424204 Hi, all, If you write test.c wit ...
- ASP.NET常用内置对象之——Server
简介 Server对象是HttpServerUtility的一个实例,也是上下文对象context的一个属性,提供用于处理Web请求的Helper方法. 常用成员 一.Server.MapPath() ...
- 【Leetcode】【Medium】Rotate Image
You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwise). ...
- QT容器map的插入,修改,遍历
除了map,QT的容器还有hash,以及迭代器等,这里写的是map #include "mainwindow.h" #include <QApplication> #i ...
- 【深入理解JAVA虚拟机】第三部分.虚拟机执行子系统.3.函数调用与执行
这章原名叫“虚拟机字节码执行引擎”,实际就是讲的函数如何调用和执行的. 1.概述 “虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力, 其区别是物理机的执行引擎是直接建立在处理器. 硬 ...
- Oracle Update语句
Oracle没有update from语法,可以通过四种写法实现同样的功能: 一.标准update语法(常用.速度可能最慢) 当更新的表示单个或者被更新的字段不需要关联表带过来,此法是最好的选择. u ...
- webpack学习(五)配置详解
配置详解 //使用插件html-webpack-plugin打包合并html //使用插件extract-text-webpack-plugin打包独立的css //使用UglifyJsPlugin压 ...
- SAP CRM One order里user status和system status的mapping逻辑
Below example show: How the mapping relationship between User status and System status maintained in ...