JavaSe:Comparator

今天,公司里有一个萌萌的妹子问我java 中的comparator是怎么回事。参数分别是什么,返回值又是什么,为此,我写了一个简单的程序告诉了她:

public static void main (String[] args){
    List<String> list = new ArrayList<String>(Arrays.asList(new String[]{"1", "a", "222", "221","221"}));    Collections.sort(list,new Comparator(){
public int compare(String str1, String str2){
                   int r = str1.compareTo(str2);
                   System.out.println(str1 + "-" + str2 +"=" + r);
                   return r;
             }
     }) ;
    System.out.println(list.toString());

}

执行结果:

                                                      lista-1=48                                                [1, a]
222-a=-47
222-a=-47
221-1=1                                               [1, 222, a]
221-222=-1
221-1=1                                               [1, 221, 222, a]
221-221=0                                             [1, 221, 222, 222, a]
[1, 221, 221, 222, a];

通过这个执行结果,我们可以看出一下几点:

以compare(a1, a2)为例:

1)其中a1 是要添加的数数据, a2是从集合中取出来的与a1比较的数据

2) 返回值 >0时,放后面。

       返回值<0 时,放前面。

3)集合默认是升序排序的。如果想要降序排序,你在比较时,应该是 a2 - a1 (也就是拿第二个参数跟第一个比较)。

另外:

4)List 在排序时,采用的是二分法排序。

时间: 2025-01-16 03:21:06

JavaSe:Comparator的相关文章

普林斯顿公开课 算法3-9:Comparator比较器

在前几个章节中使用了Comparable作为比较函数.比如对于字符串,就是按字母表的顺序进行排序.有时候想要换一种比较方式,该怎么实现呢? 在Java中可以使用Comparator比较器,以下代码展示了字符串之间不同的比较方式. String[] a; ... Arrays.sort(); ... Arrays.sort(a, String.CASE_INSENSITIVE_ORDER); Arrays.sort(a, Collator.getInstance(new Locale("es&qu

Java:Comparator接口

public interface Comparator<T> 接口里面的方法 int compare(T o1, T o2) o1 > o2 返回 1 o1 = o2 返回 0 o1 < o2 返回 -1 boolean equals(Object obj) 判断是否相等 其他方法:https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html 强行对某个对象 collection 进行整体排序 的比较函数.可

另一种比较器:Comparator

package comparatordemo.cn; import java.util.Comparator; /* * 一个对象的初期,并没有实现comparable 接口,此时肯定无法进项对象的排序操作,所以为了解决这个问题, * Java又定义了另一个比较器的操作接口,但是前提是:必须先定义好一个比较规则类出来 * 接口的定义如下: * public interface Comparator<T>{ * public int compare(T o1, T o2) ; * boolean

JavaSe:Instrumentation

Instrumentation 类加载过程 Instrumentation与Transformer Instrumentation与Transformer的关系 Instrumentation接口简介 触发字节码转换的途径 Transformer分类 Transformer调度过程 Transformer如何实现 redefineClasses.retransformClasses 注意事项 Instrumentation Instrumentation是JDK提供的用于支撑字节码修改的服务.在

JavaSe:ThreadLocal

JDK中有一个ThreadLocal类,使用很方便,但是却很容易出现问题.究其原因, 就是对ThreadLocal理解不到位.最近项目中,出现了内存泄漏的问题.其中就有同事在使用ThreadLocal时,没有用好.所以特写下此文. ThreadLocal的设计 ThreadLocalMap.ThreadLocal说明 使用ThreadLocal后的内存模型 如何正确的使用ThreadLocal 错误的使用ThreadLocal会造成内存泄漏 ThreadLocal设计 ThreadLocal的类

JavaSE:异常总结(Exception)

整体结构:        java.lang.Throwable               java.lang.Error               java.lang.Exception                      java.lang.RuntimeException 编译时异常为受检异常(checked) 1.异常:程序在执行过程中发生的不正常情况,程序员可以捕获处理 错误:不期望被用户捕获的异常,如计算机硬件的损坏,内存溢出. 2.编译时异常:.java源文件在执行.ja

JavaSe:Properties文件格式

Properties文件格式说明 Properties继承自Hashtable,是由一组key-value的集合. 在Java中,常用properties文件作为配置文件.它的格式是什么样的呢? 下图是一个用于展示格式的properties文件 下面是测试结果: properties文件的书写要求总结: 1.注释内容由 # 或者! 开头 2.key,value之间用 = 或者 : 分隔.一行中既有=也有:时,第一个(或者=或者:)将作为key,value分隔符. 3.key 不能换行,value

JavaSe:Cookie 管理的API介绍

CookieManager 在使用HttpURLConnection中,并没有关于Cookie的管理.如果使用Java程序时,怎么管理cookie呢? Cookie案例 1. User Agent -> Server POST /acme/login HTTP/1.1 [form data] 2. Server -> User Agent HTTP/1.1 200 OK Set-Cookie2: Customer="WILE_E_COYOTE"; Version="

JavaSE:命名规则、进制转换、原码补码反码、数据类型以及转换

1:关键字(掌握) (1)被Java语言赋予特定含义的单词 (2)特点: 全部小写. (3)注意事项: A:goto和const作为保留字存在. B:类似于Notepad++这样的高级记事本会对关键字有特殊颜色标记 2:标识符(掌握) (1)就是给类,接口,方法,变量等起名字的字符序列 (2)组成规则: A:英文大小写字母 B:数字 C:$和_ (3)注意事项: A:不能以数字开头 B:不能是java中的关键字 C:区分大小写 (4)常见的命名规则(见名知意) A:包 全部小写 单级包:小写 举