compareTo方法

`public int compareTo(String anotherString)`

按字典顺序比较两个字符串。该比较基于字符串中各个字符的 Unicode 值。按字典顺序将此 String 对象表示的字符序列与参数字符串所表示的字符序列进行比较。如果按字典顺序此 String 对象位于参数字符串之前,则比较结果为一个负整数。如果按字典顺序此 String 对象位于参数字符串之后,则比较结果为一个正整数。如果这两个字符串相等,则结果为 0;compareTo 只在方法 equals(Object) 返回 true 时才返回 0。
这是字典排序的定义。如果这两个字符串不同,那么它们要么在某个索引处的字符不同(该索引对二者均为有效索引),要么长度不同,或者同时具备这两种情况。如果它们在一个或多个索引位置上的字符不同,假设 k 是这类索引的最小值;则在位置 k 上具有较小值的那个字符串(使用 < 运算符确定),其字典顺序在其他字符串之前。在这种情况下,compareTo 返回这两个字符串在位置 k 处两个char 值的差,即值:

this.charAt(k)-anotherString.charAt(k)
如果没有字符不同的索引位置,则较短字符串的字典顺序在较长字符串之前。在这种情况下,compareTo 返回这两个字符串长度的差,即值:
this.length()-anotherString.length()

指定者:
接口 Comparable 中的 compareTo
参数:
anotherString - 要比较的 String。
返回:
如果参数字符串等于此字符串,则返回值 0;如果此字符串按字典顺序小于字符串参数,则返回一个小于 0 的值;如果此字符串按字典顺序大于字符串参数,则返回一个大于 0 的值

package com.tjrac_java_2;import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
class People{int age;String name;public People(String name,int age){this.name=name;this.age=age;}public int getAge() {return age;}public String getName() {return name;}
}
class rule implements Comparator<String>{@Overridepublic int compare(String o1, String o2) {/*      if(o1.compareTo(o2)<0){return 1;}else{return 0;}*/return o1.compareTo(o2);}}
public class ReSort {public static void main(String[] args) {People p = new People("魏杰",22);People p1 = new People("宋光来",21);People p2 = new People("杨",23);People [] s=new People[3];s[0]=p;s[1]=p1;s[2]=p2;Arrays.sort(s,new Comparator<People>(){@Overridepublic int compare(People o1, People o2) {//              if(o1.age>=o2.age){//                  return 1;
//              }
//              else {//                  return 0;
//              }return o1.age-o2.age;}});System.out.println("---------------------------");for (People pp : s) {System.out.println(pp.name+"->"+pp.getAge());}String[] str ={"一","一一一一","一一一","一"};Arrays.sort(str,new rule());for (String string : str) {System.out.println(string);}}
}

comparator接口与Comparable接口的区别

  1. Comparator 和 Comparable 相同的地方

他们都是java的一个接口, 并且是用来对自定义的class比较大小的,

什么是自定义class: 如 public class Person{ String name; int age }.

当我们有这么一个personList,里面包含了person1, person2, persion3…, 我们用Collections.sort( personList ),
是得不到预期的结果的. 这时肯定有人要问, 那为什么可以排序一个字符串list呢:

如 StringList{“hello1” , “hello3” , “hello2”}, Collections.sort( stringList ) 能够得到正确的排序, 那是因为
String 这个对象已经帮我们实现了 Comparable接口 , 所以我们的 Person 如果想排序, 也要实现一个比较器。

Comparator 和 Comparable 的区别

Comparable

Comparable 定义在 Person类的内部:

public class Persion implements Comparable {…比较Person的大小…},

因为已经实现了比较器,那么我们的Person现在是一个可以比较大小的对象了,它的比较功能和String完全一样,可以随时随地的拿来
比较大小,因为Person现在自身就是有大小之分的。Collections.sort(personList)可以得到正确的结果。

Comparator

Comparator 是定义在Person的外部的, 此时我们的Person类的结构不需要有任何变化,如

public class Person{ String name; int age },

然后我们另外定义一个比较器:

public PersonComparator implements Comparator() {…比较Person的大小…},

在PersonComparator里面实现了怎么比较两个Person的大小. 所以,用这种方法,当我们要对一个 personList进行排序的时候,
我们除了了要传递personList过去, 还需要把PersonComparator传递过去,因为怎么比较Person的大小是在PersonComparator
里面实现的, 如:

Collections.sort( personList , new PersonComparator() ).

  1. Comparator 和 Comparable 的实例

Comparable:

实现Comparable接口要覆盖compareTo方法, 在compareTo方法里面实现比较:
public class Person implements Comparable {
String name;
int age
public int compareTo(Person another) {
int i = 0;
i = name.compareTo(another.name); // 使用字符串的比较
if(i == 0) { // 如果名字一样,比较年龄, 返回比较年龄结果
return age - another.age;
} else {
return i; // 名字不一样, 返回比较名字的结果.
}
}
}
这时我们可以直接用 Collections.sort( personList ) 对其排序了.

Comparator:

实现Comparator需要覆盖 compare 方法:
public class Person{
String name;
int age
}

class PersonComparator implements Comparator {
public int compare(Person one, Person another) {
int i = 0;
i = one.name.compareTo(another.name); // 使用字符串的比较
if(i == 0) { // 如果名字一样,比较年龄,返回比较年龄结果
return one.age - another.age;
} else {
return i; // 名字不一样, 返回比较名字的结果.
}
}
}
Collections.sort( personList , new PersonComparator()) 可以对其排序

4:总结

两种方法各有优劣, 用Comparable 简单, 只要实现Comparable 接口的对象直接就成为一个可以比较的对象,
但是需要修改源代码, 用Comparator 的好处是不需要修改源代码, 而是另外实现一个比较器, 当某个自定义
的对象需要作比较的时候,把比较器和对象一起传递过去就可以比大小了, 并且在Comparator 里面用户可以自
己实现复杂的可以通用的逻辑,使其可以匹配一些比较简单的对象,那样就可以节省很多重复劳动了。
引用:https://www.cnblogs.com/sunflower627/p/3158042.html

Arrays.sort()用来自定义排序的使用相关推荐

  1. 二维数组排序php array_work,Arrays.Sort()中的那些排序算法

    本文基于JDK 1.8.0_211撰写,基于java.util.Arrays.sort()方法浅谈目前Java所用到的排序算法,仅我的看法和笔记,如有问题欢迎指证,着重介绍其中的TimSort排序,其 ...

  2. 使用Arrays sort 方法進行排序

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! impo ...

  3. 对于二维数组,如何用Arrays.sort()进行排序以及理解------通俗易懂,条理清晰

    public static void main(String[] args) {int[][] nums = {{5, 0}, {4, 1}, {6, 2}};//重写Comparator接口里面的c ...

  4. Excel:如何按自己的要求来自定义排序。

    现在我拿到了一张表,但是上面的排列不是我想要的,我需要把他弄成我想要的排列.首先打开这张表. 比如上面这张表我想把他弄成:广东--广州--贵州--贵阳--四川--泸州这样的顺序排列.首先来选中要排列的 ...

  5. Java数组排序: Array-ArrayList-List-Collections.sort()/List.sort()/Arrays.sort()

    文章目录 ArrayList/List 的排序:Collections.sort()/List.sort() Array 的排序:Arrays.sort() 此文首发于我的Jekyll博客:zhang ...

  6. java arrays.sort() c_正面刚算法-Java中Arrays.sort()(一)

    最近一直在看关于排序相关的算法,从O(n²)的冒泡.插入.选择到O(nlog(n))的归并.快排.再到桶排序.计数排序.基数排序.各个算法都有自己的优点和缺点,那么jdk中关于这种底层的算法是怎么实现 ...

  7. jdk8 Arrays.sort()实现分析

    Arrays.sort()根据所需要排序的数组的特点会选择不同的排序算法. 第一种情况,当被排序的数组长度小于47并且排序是从数组起始位置开始的时候,采用的排序方式是最简单的插入排序. for (in ...

  8. java自定义排序函数_JAVA中sort函数的 自定义排序 cmp函数的写法 【java】【cmp】...

    查了很多博客,了解挺多有关cmp函数的问题.所以在这里来总结一下写法.. 我们通常可以用这个cmp函数来改变Arrays.sort()函数的默认排序方法.这里我们以升序排序为例. 基本方法 int c ...

  9. java arrays.sort() c_5.4 (Java学习笔记)集合的排序(Collections.sort(),及Arrays.sort())...

    1.Comparable接口 这个接口顾名思义就是用于排序的,如果要对某些对象进行排序,那么该对象所在的类必须实现 Comparabld接口.Comparable接口只有一个方法CompareTo() ...

最新文章

  1. (转载)机器学习知识点(十五)从最大似然到EM算法浅解
  2. 【MM模块】Procurement for Consumption Material 消耗性物料的采购流程
  3. 《系统集成项目管理工程师》必背100个知识点-45质量管理
  4. Maven构建java项目
  5. vue打包后出现一些map文件的解决方法
  6. 微信登录画面_微信登录界面改版,美炸了!
  7. Extjs 判断对象是非为null或者为空字符串
  8. 将图片转化为txt文本显示
  9. BSC(币安智能链)主网链部署
  10. 浏览器预览pdf文件名称不对,Java使用iText修改Pdf文件的标题属性,自定义预览文件名
  11. Java | 绘图:Graphics2D
  12. 怎样一次性删掉word或wps文档里的空格行
  13. 人生就是游戏,你如何遵守游戏规则?
  14. bugtraq mysql,Oracle MySQL Server远程安全漏洞(CVE-2017-3459)
  15. 1024. 视频拼接
  16. 微信跳转外部浏览器下载
  17. 经典论文翻译导读之《A Bloat-Aware Design for Big Data Applications》
  18. 如果大家看了我的tools专栏,里面的小工具有不少,我提炼出来给大家——加密解密
  19. Python基础课程-面向对象编程
  20. 专治懒癌100年,疗效嗷嗷好!

热门文章

  1. 甘肃计算机教室中标,大单纷至沓来 甘肃百亿工程浪潮电脑中标8000台
  2. JAVA入门级教学之(第一章总结)
  3. 转本计算机考试题目,2011江苏专转本计算机考试模拟试题答案
  4. python中计算整商的运算符_Python 运算符中用来计算整商的是( ). (2.0分)_学小易找答案...
  5. python爬虫有学c的必要吗_可以一边学python爬虫一边学c语言吗?
  6. 大数据学情分析_多分学情大数据分析
  7. c++ 读取访问权限冲突_Linux系统利用可执行文件的Capabilities实现权限提升
  8. docker运行jenkins挂掉_【图文】Jenkins教程集成SonarQube
  9. mfc打开一个.txt文件并进行处理_文件处理方法Python
  10. 简单的php,php简单语句