Comparable 和 Comparator

Comparable 和 Comparator 是两个关系不大的类,其分别侧重于不同的方面。

其中,接口 Comparable<T> 强行对实现它的每个类的对象进行整体排序。

这种排序被称为类的自然排序,类的 compareTo 方法被称为它的自然比较方法

Date dt = new Date();
// 默认计算从标准时间为止的毫秒数,也可以指定初始时间
Date dt2 = new Date(2222L);
// -1 表示小于,0表示等于,1表示相等
System.out.println(dt.compareTo(dt2)); // 1

对于接口 Comparator<T> ,则实现了一个比较函数,

List<Integer> lt = new ArrayList<>();
lt.add(2);
lt.add(8);
lt.add(3); lt.sort((t1, t2) -> t1 < t2 ? 1 : (t1.equals(t2) ? 0 : -1)); /*lt.sort(new Comparator<Integer>() {*/
/* @Override*/
/* public int compare(Integer t1, Integer t2) {*/
/* return t1 < t2 ? 1 : (t1.equals(t2) ? 0 : -1);*/
/* }*/
/*});*/ System.out.println(lt);

Iterable 和 Iterator

接口 Iterable<T> 实现这个接口允许对象成为 "foreach" 语句的目标。

注意:由于 java中没有 Array类,所以数组中没有实现 Iterable 接口,但是它可以使用 foreach方式遍历。

而其核心方法就是 iterator ,该方法的返回值为 Iterator<T> 对象。通过Iterator 对象的hasNext()与 next() 方法实现遍历。

从某种角度来说,foreach 是 iterator的简单语法糖(一种形式):

List<Integer> lt = new ArrayList<>(4);
lt.add(2);
lt.add(9);
lt.add(3); for (int i : lt) {
System.out.println(i);
} Iterator<Integer> itor = lt.iterator();
while (itor.hasNext()) {
Integer i = itor.next();
System.out.println(i);
}

  

注意:当直接使用 iterator 时,注意在 while方法体内不能调用对集合调用任何 modify形式的方法 (如 add,remove,clear 等方法),否则抛出 ConcurrentModificationException 异常,但是可以调用 iterator 对象的本身的 remove方法。

foreach 同理,但可以在只使用 while 遍历,而不使用 iterator的循环中使用 modify形式的方法。

java 中的 Comparable 和 Comparator 与 Iterable 和 Iterator的更多相关文章

  1. 【软件构造】(转)Java中的comparable和comparator

    为了方便阅读和复习,转载至此,原地址:温布利往事的博客 阅读目录 一.Comparable简介 二.Comparator简介 三.Comparable和Comparator区别比较 回到顶部 一.Co ...

  2. 来吧,一文彻底搞懂Java中的Comparable和Comparator

    大家好,我是沉默王二,今天在逛 programcreek 的时候,我发现了一些专注细节但价值连城的主题.比如说:Java 的 Comparable 和 Comparator 是兄弟俩吗?像这类灵魂拷问 ...

  3. Java基础系列-Comparable和Comparator

    原创文章,转载请标注出处:<Java基础系列-Comparable和Comparator> 一.概述         Java中的排序是由Comparable和Comparator这两个接 ...

  4. Java基础之Comparable与Comparator

    Java基础之Comparable与Comparator 一.前言: Java中实现对对象的排序一般情况下主要有以下两种实现方式(万物皆对象嘛): 对象所在的类实现Comparable 接口 定义比较 ...

  5. Java中的Comparable<T>和Comparator<T>接口

    有的时候在面试时会被问到Comparable<T>和Comparator<T>的区别(或者Java中两种排序功能的实现区别). 1) 在使用普通数组的时候,如果想对数据进行排序 ...

  6. Java中的comparable接口和Comparator接口的区别

    一.comparable和Comparator的区别 1.Comparable和Comparator都是用来实现集合中元素的比较.排序的. 2.Comparable是在类内部定义的方法实现的排序,位于 ...

  7. Java学习之Comparable与Comparator的区别

    Comparable & Comparator 都是用来实现集合中元素的比较.排序的,只是 Comparable 是在集合内部定义的方法实现的排序,Comparator 是在集合外部实现的排序 ...

  8. java比较排序Comparable和Comparator

    1       比较排序Comparable和Comparator 1.1      接口作用说明 Comparable和Comparator都是用来实现对象的比较.排序,对比时需要实现Compara ...

  9. java中Comparatable接口和Comparator接口的区别

    1.不同类型的排序规则 .自然排序是什么?   自然排序是一种升序排序.对于不同的数据类型,升序规则不一样:   BigDecimal BigInteger Byte Double Float Int ...

随机推荐

  1. EBS WEBADI 下载模板提示 Visual Basic 运行时错误 '91' 对象变量或With块变量未设置

    按以下的方法设置一遍EXCEL,并设置浏览器的安全属性.

  2. win32下使用相对exe文件的绝对路径资源

    在使用VC++进行开发时,如果按F5进行Debug时,当前相对资源是相对工程的vcxproj的文件夹目录,而直接双击运行exe时,资源是相对exe的文件夹目录.为了兼容这二者,最好使用绝对路径,这样无 ...

  3. Spring Boot 中application.yml与bootstrap.yml的区别

    其实yml和properties文件是一样的原理,且一个项目上要么yml或者properties,二选一的存在. 推荐使用yml,更简洁. bootstrap与application1.加载顺序这里主 ...

  4. MYSQL的联合查询最好是少用,效能差异巨大

    同样的功能,不同的写法,时间和内存占用差了几千倍,不废话,直接上代码 第一种写法: 代码如下: $Rs=DB::get($_ENV['DB'],3,"SELECT * FROM _xiazh ...

  5. js格式化格林威治时间

    格式化时间:Sat Aug 05 00:00:00 CST 2017 function fermitTime(time){ var now = new Date(time); var year = n ...

  6. GDAL指定自定义的金字塔目录

    缘起 对于一般的遥感影像文件,金字塔文件默认都是与影像文件放在同一个目录下,金字塔文件名一般与源影像文件名相同,但后缀名不同.或者金字塔内建于影像内部,但这不是这里所涉及的. 在使用ArcGIS桌面版 ...

  7. 关于inodes占用100%解决方法

    df -i; 发现inode节点占满: 这个时候如果不知道哪儿节点占用多可以用下边的脚本进行检查,查看到底哪个目录下面的文件最多: for i in /*; do echo $i; find $i | ...

  8. Java之JavaWeb项目开发开始准备

    操作系统:Mac OS 10.11.6 Tomcat版本:9.0.0.M17 前言:部署Tomcat可以参考我一年前做的笔记:<在MAC下搭建JSP开发环境>,也可以参考大神写的挺好的&l ...

  9. k8s dev

    0. install golang 1.9.1 https://golang.org/doc/install 1. development.md https://github.com/kubernet ...

  10. Control group namespaces

    https://www.toptal.com/linux/separation-anxiety-isolating-your-system-with-linux-namespaces https:// ...