【java】实现Interface java.lang.Comparable<T>接口的int compareTo(T o)方法实现对象数组或链表或集合的排序,和挽救式对象比较器Interface java.util.Comparator<T>
package 对象比较排序;
import java.util.Arrays;
class A implements Comparable<A>{
private String name;
private int age;
public A(String name,int age){
this.name=name;
this.age=age;
}
@Override
public int compareTo(A o) {//此方法无需手工调用,Arrays会自动调用
if(this.age<o.age)
return -1;//1.this小于返回负数,this大于返回正数,则升序;
if(this.age>o.age)
return 1;//2.this小于返回正数,this大于返回负数,则降序;
return 0;//相等返回0
}
@Override
public String toString() {
return "name="+name+",age="+age+"\n";
}
}
public class TestComparable {
public static void main(String[] args) {
A[] as=new A[]{
new A("张三",63),
new A("李四",33),
new A("王五",53),
new A("赵六",43),
};
Arrays.sort(as);
System.out.println(Arrays.toString(as));
}
}
运行结果:
[name=李四,age=33
, name=赵六,age=43
, name=王五,age=53
, name=张三,age=63
]
package 对象比较排序; import java.util.Arrays;
import java.util.Comparator; class B{
private String name;
private int age;
public B(String name,int age){
this.name=name;
this.age=age;
}
public int getAge() {
return age;
}
@Override
public String toString() {
return "name="+name+",age="+age+"\n";
}
}
class BComparator implements Comparator<B>{
@Override
public int compare(B o1, B o2) {
if(o1.getAge()<o2.getAge())
return -1;
if(o1.getAge()>o2.getAge())
return 1;
return 0;
}
}
public class TestComparator {
public static void main(String[] args) {
B[] bs=new B[]{new B("张三",44),
new B("李四",33),
new B("王二",55),
new B("赵六",66)};
BComparator bc=new BComparator();
Arrays.sort(bs, bc);
System.out.println(Arrays.toString(bs));
}
}
运行结果:
[name=李四,age=33
, name=张三,age=44
, name=王二,age=55
, name=赵六,age=66
]
如果需要对一组对象进行排序建议优先使用Comparable
【java】实现Interface java.lang.Comparable<T>接口的int compareTo(T o)方法实现对象数组或链表或集合的排序,和挽救式对象比较器Interface java.util.Comparator<T>的更多相关文章
- java.lang.Comparable<T> 接口
package java.lang; import java.util.*; public interface Comparable<T> { public int compareTo(T ...
- java基础面试题:如何把一段逗号分割的字符串转换成一个数组? String s = "a" +"b" + "c" + "d";生成几个对象?
package com.swift; public class Douhao_String_Test { public static void main(String[] args) { /* * 如 ...
- java学习-Comparable<Integer>接口方法的实现
基本数据类型的包装类Integer, Float, Double,Long,Byte等都实现的Comparable接口,用于列表List或数组arrays的排序 Comparable<Integ ...
- Java探索之旅(11)——抽象类与接口
1.Java数据类型 ❶不可变类,是指当创建了这个类的实例后,就不允许修改它的属性值. 它包括: Primitive变量:boolean,byte, char, doubl ...
- 如何理解 Java 中的 <T extends Comparable<? super T>>
Java 中类似 <T extends Comparable<? super T>> 这样的类型参数 (Type Parameter) 在 JDK 中或工具类方法中经常能看到. ...
- Java基础知识强化之集合框架笔记45:Set集合之TreeSet存储自定义对象并遍历练习1(自然排序:Comparable)
1. 自然排序: TreeSet会调用集合元素的compareTo(Object obj)方法来比较元素之间的大小关系,然后将集合元素按照升序排列,这种方式就是自然排序. Java中提供了一个Comp ...
- java中compareTo和compare方法之比较
这两个方法经常搞混淆,现对其进行总结以加深记忆. compareTo(Object o)方法是java.lang.Comparable接口中的方法,当需要对某个类的对象进行排序时,该类需要实现Comp ...
- java中compareTo和compare方法之比较,集合中对象的比较
前言 转自:http://www.cnblogs.com/yueliming/archive/2013/05/22/3092576.html (这里做了一些小改动) 一直一来对集合中对象的比较方案,有 ...
- 利用Comparable接口实现对对象数组的排序
Arrays 类中的sort方法承诺可以对对象数组进行排序,但是需要对象所属的类实现Comparable接口 任何实现Comparable接口的对象都需要实现该方法 并且在Java SE 5.0之前该 ...
随机推荐
- Go环境搭建
Linux系统golang环境搭建 1.下载安装包go1.8.linux-amd64.tar golang安装包下载地址:https://golang.org/dl/ ( 有可能被FQ) 2.解 ...
- C++语言中的类型(一)
--分门别类是简化事物最有效的方式. 类型是C++语言的基础,对象类型决定了能对该对象进行的操作. 一.基本内置数据类型 C++预先定义的基本内置数据类型是构造世界万物的原子,数据类型告诉我们数据的意 ...
- js的学习(window对象的使用)
open方法: //语法:var winObj = window.open([url][,name][,options]); //参数:url:准备在新窗口中显示那个文件.url可以为空字符串,表示 ...
- Libevent 事件管理和添加事件
/** 我们先来看一下事件的创建*/struct event * event_new(struct event_base *base, evutil_socket_t fd, short even ...
- ##1.Centos7环境准备-- openstack pike
##1.Centos7环境准备 openstack pike 安装 目录汇总 http://www.cnblogs.com/elvi/p/7613861.html ##.Centos7环境准备 #Ce ...
- 51Nod 1110 距离之和最小 V3 中位数 思维
基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 X轴上有N个点,每个点除了包括一个位置数据X[i],还包括一个权值W[i].点P到点P[i]的带权距离 = 实际距离 ...
- Java SE 8 流库
1. 流的作用 通过使用流,说明想要完成什么任务,而不是说明如何去实现它,将操作的调度留给具体实现去解决: 实例:假如我们想要计算某个属性的平均值,那么我们就可以指定数据源和属性,然后,流库就可以对计 ...
- WPF依赖对象(DependencyObject) 实现源码,理解WPF原理必读
/// DependencyObject encompasses all property engine services. It's primary function /// is providin ...
- 百度编辑器的内容改变事件监听bug
先贴上我的初始化代码,可能是用法问题冤枉了百度编辑器,如果是我的用法有问题欢迎大侠们指正 <!DOCTYPE type> <html> <head> <met ...
- 移动 云MAS 发短信 .net HTTP 请求
本人开发移动云MAS .net Http 请求 代码如下 using Newtonsoft.Json.Linq; using System; using System.Collections.Gen ...