【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之前该 ...
随机推荐
- System.Transactions 事务超时属性
最近遇到一个处理较多数据的大事务,当进行至10分钟左右时,爆出事务超时异常,如果Machine.config中不设置最大超时时间,则默认超时时间为10分钟 MachineSettingsSection ...
- 关于web变量配置问题
关于web变量配置问题 webservice里面接口完成时考虑到接口可能用在不同的服务器,不同的数据库所以将链接地址修改成变量,在webconfig里面去修改它更加的容易方便 假始根据在同一个服务器里 ...
- Fedora 23建立wifi热点(Android手机可用)
在ubuntu14.04下使用ap-hotspot,速度还不错.但是在15.04下就用不了了,不知为啥.现在使用fedora23,在学校还是挺需要给手机连wifi的,于是google看看ap-hots ...
- HTML5学习指导路线
HTML5是现在热门的技术,经过8年的艰苦努力,该标准规范终于制定完成,在这里为想要学习HTML5初级程序员详细划分一下学习内容和步骤,让大家清楚的知道HTML5需要学什么?能够快速掌握HTML5开发 ...
- java虚拟机概述
java 虚拟机是什么? java虚拟机是一个将字节码指令映射为对应物理操作系统指令的程序. java程序的运行需要事先安装 jdk,而在jdk内部的jre中其核心就是 jvm ...
- 你绝不能错过的效率神器 —— Alfred
文章首发于[博客园-陈树义],点击跳转到原文<你绝不能错过的效率神器 -- Alfred> Alfred 是 Mac 系统上一款专注于效率提升的著名应用,它能帮你快速打开网页.快速进行自定 ...
- netty源码分析
1.Netty是由JBOSS提供的一个java开源框架.Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客户端程序.也就是说,Netty 是一个基于N ...
- CCF-201403-1-相反数
问题描述 试题编号: 201403-1 试题名称: 相反数 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 有 N 个非零且各不相同的整数.请你编一个程序求出它们中有多少对相反 ...
- 计算rem
(function(doc, win) { var docEl = doc.documentElement, resizeEvt = 'orientationchange' in window ? ' ...
- Jdk8的学习之lambda
在JDK8中,引入了Lambda(读:了母达)表达式的概念,这是我最喜欢的特性,很多东西都变得简单了,一行代码可以搞定. 比如说排序 /** * 这是一个JDK8的lambda的排序应用 */ pub ...