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的区别的更多相关文章

  1. Java中Comparable和Comparator接口区别分析

    Java中Comparable和Comparator接口区别分析 来源:码农网 | 时间:2015-03-16 10:25:20 | 阅读数:8902 [导读] 本文要来详细分析一下Java中Comp ...

  2. Java中Comparable和Comparator的区别

    前言 最近复习遇到了这个问题,在此进行一个详细的记录,分享给大家. 两个接口的区别 包区别 Comparable接口是在java.lang下. Comparator接口是在java.util下. 使用 ...

  3. Java中Comparable与Comparator的区别

    相同 Comparable和Comparator都是用来实现对象的比较.排序 要想对象比较.排序,都需要实现Comparable或Comparator接口 Comparable和Comparator都 ...

  4. Comparable与Comparator的区别

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

  5. Comparable和Comparator的区别&Collections.sort的两种用法

    在Java集合的学习中,我们明白了: 看到tree,可以按顺序进行排列,就要想到两个接口.Comparable(集合中元素实现这个接口,元素自身具备可比性),Comparator(比较器,传入容器构造 ...

  6. 面试----java基础集合---------------------comparable和comparator 的区别

    comparable接口     是主要是用来自定义类存储在主要是TreeSet,TreeMap(键)集合中存储时,自定通过实现这种接口得到自然排序的功能. comparator 接口  是主要是用来 ...

  7. 浅谈Comparable与Comparator的区别

    平时进行自定义排序一直使用实现Comparable接口,一段时间后操作的时候居然发现有了个Comparator接口 上网差了些资料,总结笔记一下. 基本原理就是比较,底层是二叉树 比如是3,6,5,1 ...

  8. Comparable 与 Comparator的区别

    Comparable & Comparator 都是用来实现集合中元素的比较.排序的,只是 Comparable 是在集合内部定义的方法实现的排序,Comparator 是在集合外部实现的排序 ...

  9. PAT——1055. 集体照 (比较comparable和comparator的区别)

    拍集体照时队形很重要,这里对给定的N个人K排的队形设计排队规则如下: 每排人数为N/K(向下取整),多出来的人全部站在最后一排: 后排所有人的个子都不比前排任何人矮: 每排中最高者站中间(中间位置为m ...

随机推荐

  1. 为TextView增加onclick

    必须添加上 android:clickable="true"

  2. Android Studio图形基础(AS开发实战第二章学习笔记)

    图形基础 一.drawable 在代码中引用drawable文件可分为两种情况 (1)使用setBackgroundResource和setImageResource方法,可直接在参数中指定drawa ...

  3. SQL Server ->> 高可用与灾难恢复(HADR)技术 -- AlwaysOn(实战篇)之AlwaysOn可用性组搭建

    因为篇幅原因,AlwaysOn可用性组被拆成了两部分:理论部分和实战部分.而实战部分又被拆成了准备工作和AlwaysOn可用性组搭建. 三篇文章各自的链接: SQL Server ->> ...

  4. linux下设置eclipse中的项目和类名的字体大小

    由于刚装的eclipse中的项目和类名字体太小,并且windows中没有可以更改的方法, 所以参考了网上一些文章,终于修改成功,所以反馈进行分享,望国内开源风气如stackoverflow一样. 步骤 ...

  5. Service Discovery in WCF 4.0 – Part 2 z

    Service Discovery in WCF 4.0 – Part 2 In the previous post I discussed about the basic usage of WCF ...

  6. 【Leetcode】【Medium】Maximum Subarray

    Find the contiguous subarray within an array (containing at least one number) which has the largest ...

  7. vue + element-ui 制作下拉菜单(可配置路由、可根据路由高亮list、可刷新自动展开定位路由)

    本篇文章分享一篇关于 vue制作可路由切换组件.可刷新根据路由定位导航(自动展开).可根据路由高亮对应导航选项 一.实现的功能如下: 1.可折叠导航面板 2.点击导航路由不同组件           ...

  8. Yii框架记录

    Yii框架记录 Yii 结构 使用yii开发一段时间,发现自身知其形不知其意,重温了下yii,理解框架,也可以梳理自己的知识库,借鉴成长,阶段性总结如下: 模型 模型是MVC模式中的一部分,是表现业务 ...

  9. 沉淀,再出发——在Hadoop集群的基础上搭建Spark

    在Hadoop集群的基础上搭建Spark 一.环境准备 在搭建Spark环境之前必须搭建Hadoop平台,尽管以前的一些博客上说在单机的环境下使用本地FS不用搭建Hadoop集群,可是在新版spark ...

  10. easyui学习笔记2—在行内进行表格的增删改操作

    第一篇笔记中记录了如何实现表格的增删改,那个是点击之后跳出来一个对话框然后进行的,这里是在表格本身上进行的操作,也很简单,但是这里发现一个版本问题,也可以说是兼容性问题. 1.首先我们看引用的js和c ...