对象排序,compareTo
第一个例子
- /*为了比较,让自己的类实现Comparable接口,按照自己想要的排序方式重写compareTo
- *Map只是提供了对键的排序,但是当我们需要对值排序时就的提供我们自己的比较器 这里 只是模拟了Map但是实际上并没有使用Map
- */
- import java.util.Iterator;
- import java.util.Set;
- import java.util.TreeSet;
- public class SortByValue {
- public static void main(String[] args) {
- Set<Pair> set = new TreeSet<Pair>();
- set.add(new Pair("me", "1000"));
- set.add(new Pair("and", "4000"));
- set.add(new Pair("you", "3000"));
- set.add(new Pair("food", "10000"));
- set.add(new Pair("hungry", "5000"));
- set.add(new Pair("later", "6000"));
- set.add(new Pair("myself", "1000"));
- for (Iterator<Pair> i = set.iterator(); i.hasNext();)
- // 我喜欢这个for语句
- System.out.println(i.next());
- }
- }
- class Pair implements Comparable<Object> {
- private final String name;
- private final int number;
- public Pair(String name, int number) {
- this.name = name;
- this.number = number;
- }
- public Pair(String name, String number) throws NumberFormatException {
- this.name = name;
- this.number = Integer.parseInt(number);
- }
- public int compareTo(Object o) {
- if (o instanceof Pair) {
- // int cmp = Double.compare(number, ((Pair) o).number);
- int cmp = number - ((Pair) o).number;
- if (cmp != 0) {// number是第一要比较的,相当于先比较value。如果相同再比较键
- return cmp;
- }
- return name.compareTo(((Pair) o).name);
- }
- throw new ClassCastException("Cannot compare Pair with "
- + o.getClass().getName());
- }
- public String toString() {
- return name + ' ' + number;
- }
- }
- 输出结果:
- me 1000
- myself 1000
- you 3000
- and 4000
- hungry 5000
- later 6000
- food 10000
第二个例子:
- import java.util.*;
- public class NameSort {
- public static void main(String[] args) {
- Name[] nameArray = { new Name("John", "Lennon"),
- new Name("Karl", "Marx"), new Name("Groucho", "Marx"),
- new Name("Oscar", "Grouch") };
- Arrays.sort(nameArray); //根据元素的自然顺序对指定对象数组按升序进行排序。数组中的所有元素都必须实现
Comparable接口。此外,数组中的所有元 //素都必须是可相互比较的(也就是说,对于数组中的任何 e1 和 e2 元素而言,e1.compareTo(e2) 不得抛出 ClassCastException)。 - for (int i = 0; i < nameArray.length; i++) {
- System.out.println(nameArray[i].toString());
- }
- }
- }
- class Name implements Comparable<Name> {
- public String firstName, lastName;
- public Name(String firstName, String lastName) {
- this.firstName = firstName;
- this.lastName = lastName;
- }
- public int compareTo(Name o) { // 实现接口
- int lastCmp = lastName.compareTo(o.lastName);
- // 首先比较姓(lastName)如果姓相同(lastCmp==0)再比较名(firstName),否则返回名的比较
- return (lastCmp == 0 ? firstName.compareTo(o.firstName) : lastCmp);
- }
- public String toString() { // 便于输出测试
- return firstName + " " + lastName;
- }
- }
- 输出结果:
- Oscar Grouch
- John Lennon
- Groucho Marx
- Karl Marx
- //看看这个三目运算符的漂亮应用哦!
- public int compareTo(Pair o) {
- int cmp = number - o.number;
- return (cmp == 0 ? name.compareTo(o.name) : cmp);
- }
- ----------------------
- public int compareTo(Name o) { // 实现接口
- int lastCmp = lastName.compareTo(o.lastName);
- // 首先比较姓(lastName)如果姓相同(lastCmp==0)再比较名(firstName),否则返回名的比较
- return (lastCmp == 0 ? firstName.compareTo(o.firstName) : lastCmp);
- }
本文转载至:http://ocaicai.iteye.com/blog/794438
- }
对象排序,compareTo的更多相关文章
- List对象排序的通用方法
转自 @author chenchuang import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Me ...
- [个人原创]关于java中对象排序的一些探讨(三)
这篇文章由十八子将原创,转载请注明,并标明博客地址:http://www.cnblogs.com/shibazijiang/ 对对象排序也可以使用Guava中的Ordering类. 构造Orderin ...
- Java集合中对象排序
集合中的对象排序需求还是比較常见的.当然我们能够重写equals方法,循环比較:同一时候Java为我们提供了更易使用的APIs.当须要排序的集合或数组不是单纯的数字型时,通常能够使用Comparato ...
- java对对象排序
一.前言 有时我们需要对类按照类中的某一个属性(或者多个属性)来对类的对象进行排序,有两种方法可以实现,一种方法是类实现Comparable<T>接口,然后调用Collections.so ...
- java 通用对象排序
一个排序类,一个排序util? no.no.no…… 使用反射机制,写了一个通用的对象排序util,欢迎指正. 实体类: package entity; public class BaseTypeEn ...
- wpf 导出Excel Wpf Button 样式 wpf简单进度条 List泛型集合对象排序 C#集合
wpf 导出Excel 1 private void Button_Click_1(object sender, RoutedEventArgs e) 2 { 3 4 ExportDataGrid ...
- javascript数组对象排序
javascript数组对象排序 JavaScript数组内置排序函数 javascript内置的sort函数是多种排序算法的集合 JavaScript实现多维数组.对象数组排序,其实用的就是原生的s ...
- Java - 简单的对象排序 - Comparator
注:对象排序,就是对对象中的某一字段进行比较,以正序或倒序进行排序. 例: 需要排序的对象: public class Person { public int age; public String n ...
- list排序成员函数对string对象与char*对象排序的差别
对list容器中的对象排序,不能使用sort()算法,只能采用其自身的排序函数sort().因为,算法sort()只支持随机存取的容器的排序,如vector等. 对基本数据对象list排序:成员函数s ...
- js中的数组对象排序(方法sort()详细介绍)
定义和用法 sort() 方法用于对数组的元素进行排序. 语法 arrayObject.sort(sortby) 参数sortby:可选.规定排序顺序.必须是函数. 返回值 对数组的引用.请注意 ...
随机推荐
- js基础练习三之数码时钟
这章节有两个实例,1,定时器的使用; 2,数码时钟; 用到的js知识:定时器,Date对象. >>>>>定时器 开启定时器: setInterval 间隔型 setTim ...
- mysql 性能优化方案1
网 上有不少mysql 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦与复杂,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果 ...
- asp.net sqlite 当插入数据后的第一次访问会变的很慢!
<add key="ConnectionStringSQLite" value="data source=|path|DB/XXX.db;Version=3;&qu ...
- cocos2dx打包apk
一.相关工具准备 1.SDK 2.NDK 3.ANT 4.JDK 并且搭建好JDK环境 二.搭建环境 1.打开cocos2dx目录下的setup.py文件 2.如图所示,按照提示分别输入之前下载的ND ...
- python3.4学习笔记(十七) 网络爬虫使用Beautifulsoup4抓取内容
python3.4学习笔记(十七) 网络爬虫使用Beautifulsoup4抓取内容 Beautiful Soup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖 ...
- UITableViewCell内放置复杂结构的subview,但subview中的Button不响应点击事件
原因可能是subview的frame没设置或者不对,这种情况下subview的内容依然正常显示,但是无法接收点击响应的消息. 具体来说就是缺少了下面这句代码: // subview - (id)ini ...
- RabbitMQ高可用方案总结
RabbitMQ的集群方案有以下几种: 1.普通的集群 exchange,buindling再所有的节点上都会保存一份,但是queue只会存储在其中的一个节点上,但是所有的节点都会存储一份queue的 ...
- ImportError: cannot import name 'check_arrays'
from sklearn.utils.validation import check_arrays 执行 from sklearn.utils.validation import check_arra ...
- 移动APP项目优化
团队计划:设计一款给用户提供就医帮助的安卓APP. 项目计划:两个月内团队成员共同开发完成此款APP,此款APP提供预约挂号,名医名院咨询,就医导航等功能. 角色职责:负责交互设计.UI界面设计.1. ...
- python utf-8 配置
环境:centos6.5,python 2.6 源码文档使用utf-8 #!/usr/bin/python # -*- coding: UTF-8 -*- 字符串默认用utf-8(不用在前面加u了) ...