java.lang.Iterator & java.lang.Iterable

Iterator和Iterable的区别和联系

iterator是具有迭代状态的对象。它允许你检查它是否有更多的元素使用hasNext()并移动到下一个元素(如果有)使用next()。

Iterable是可以迭代的一系列元素的简单表示。它没有任何迭代状态,如“当前元素”。相反,它有一种产生迭代器的方法。通常,Iterable应该能够生成任意数量的有效迭代器。也就是说:Iterator是迭代器,可以对可以迭代的对象集合进行遍历操作。而Iterable表示集合是可以迭代的,并提供了产生迭代器的方法。

Iterator<E>方法

  • boolean hasNext();

判断是否有下一个元素存在

  • E next();

返回集合的下一个元素

  • default void remove() {throw new UnsupportedOperationException("remove");}

移除元素

  • default void forEachRemaining(Consumer<? super E> action) {... ...}

遍历集合元素。java8新增方法。同时也是java8新增的一个特性(接口中对于默认方法:default修饰的可以有实现)

Iterable<E>方法

  • Iterator<T> iterator();

返回迭代器

  • default void forEach(Consumer<? super T> action) {... ... }

集合遍历,java8新增方法。

  • default Spliterator<T> spliterator() {... ... }

java.lang.Comparable & java.lang.Comparator

Comparable和Comparator的区别和联系

Comparable表示实现该接口的类是可排序的,并提供了排序方法compareTo(Objec o)。实现此接口的对象列表(和数组)可以通过 Collections.sort(和 Arrays.sort)进行自动排序。实现此接口的对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。

Comparator表示比较器接口,提供了compare(Objec o1,Obect o2)和equals(Object o)方法。由于equals(Object o)方法已经由Object类提供,所以实现Comparator接口的类可以不用显示指定。

实现Comparable接口的类需要实现compareTo(Objec o)方法。在排序时一般使用Collections.sort()或者Arrays.sort()方法来排序。对于Integer、Long等可比较大小的类jdk中已经默认实现了comparable接口,所以可以直接使用。一般称Comparable为内部比较器。

实现Comparator接口的类需要实现compare(Object o1,Object o2)方法。在排序时如果使用Collections.sort(Arrays.sort())方法需要显示指定Comparator实现类。具体函数如下:

public static <T> void sort(List<T> list, Comparator<? super T> c) {
list.sort(c);
}

一般称Comparator为外部比较器。

Comparable和Comparator的用法

Comparable
1.自然排序

List<Integer> list = Arrays.asList(1,232,32,2,45);
Collections.sort(list);
list.forEach(System.out::println);

2.自定义排序

People p1 = new People(12,"sdf");
People p2 = new People(22,"ssdf");
People p3 = new People(10,"sdsf");
People p4 = new People(32,"sd12f");
List<People> peopleList = Arrays.asList(p1,p2,p3,p4);
Collections.sort(peopleList);
peopleList.forEach(people-> System.out.println(people));

其中:People需要继承接口Comparable:

public class People implements Comparable{
@Override
public int compareTo(Object o) {
People p = (People)o;
return this.getAge().compareTo(p.getAge());
}
}

Comparator

        People p1 = new People(12,"sdf");
People p2 = new People(22,"ssdf");
People p3 = new People(10,"sdsf");
People p4 = new People(32,"sd12f");
List<People> peopleList = Arrays.asList(p1,p2,p3,p4);
Collections.sort(peopleList, new Comparator<People>() {
@Override
public int compare(People o1, People o2) {
return o1.getAge().compareTo(o2.getAge());
}
});
peopleList.forEach(people-> System.out.println(people)); 

最新文章

  1. 一次xbuild编译失败的排查
  2. java 28 - 1 设计模式 之 面向对象思想设计原则和模版设计模式概述
  3. Delphi的TThread中的FreeOnTerminate成员
  4. PHP使用mail()函数发送邮件流程以及注意事项
  5. POJ2348+博弈
  6. ☀【插件】iScroll
  7. bss段为什么要初始化,清除
  8. Linux和windows下清除svn保存的账号密码信息
  9. [转] gdb中忽略信号处理
  10. uva10003 Cutting Sticks
  11. thinkphp 支付宝错误 Class &#39;Think&#39; not found
  12. 对于crontab定时任务不能自动执行的总结
  13. Redis的五种数据类型及方法
  14. Java IO学习--(一)概述
  15. opencv学习之路(38)、Mat像素统计基础——均值,标准差,协方差;特征值,特征向量
  16. 关于hostapd的调试
  17. Listen error 错误和 limit of inotify watches was reached
  18. arithmetic-02
  19. Luogu P1514 引水入城
  20. Sword protobuf学习四

热门文章

  1. 【网络爬虫入门02】HTTP客户端库Requests的基本原理与基础应用
  2. Hadoop(五)搭建Hadoop与Java访问HDFS集群
  3. ASP.NET MVC 学习笔记 1
  4. Java IO(Properties/对象序列化/打印流/commons-io)
  5. java中 n-- 和 --n的区别
  6. Jvm加载jar包的顺序
  7. 企业微信开发之向员工付款(C#)
  8. ASP.NET没有魔法——ASP.NET MVC 直连路由(特性路由)
  9. 微信退款流程,以及在过程中遇见的错误和解决方式(php 语言)
  10. asp.net 第三方UI控件 Telerik KendoUI 之 TreeVIew 的用法记录