Iterable<T>接口和动态规划

1 Iterable<T>接口

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

从代码上看,Iterable只是包装了一个Iterator<T> iterator();但这样包装一下后,迭代器就变成可迭代的了。

1.5后,引入了foreach,collections都实现了Iterable<T>接口。如果是实现Iterator<T>,则对List list的遍历会是list.next(),这就需要在list内部维护一个位置指针,将这个指针放在抽象出的迭代器中,是合理的。

2 动态规划

动态规划的基本思想是将待求解的问题分解为若干个子问题,按顺序求解子问题。前一子问题的解,为后一子问题的求解提供了有用的信息。

动态规划算法和分治法的基本思想比较类似,区别在于动态规划解决的问题可以分解为重叠子问题,而分治法则可以分解为独立的子问题。即动态规划是纵向分解,而分治法是横向分解。

动态规划算法的做法与一般的递归算法相反:一般来说,递归的计算方式是自顶向下;而动态规划则是自底向上。好处是,已经求解过的问题会保存,避免了重复计算。

由于动态规划是纵向切分,其适用条件比较严格,需要满足:

  • 无后效性。未来与过去无关。父阶段的解不会受子阶段影响。从状态图上看,该条约束了一个无回路的状态图。该条件的物理意义在于,原问题可以纵向分解为多个子问题(阶段)。
  • 最优化原理。一个最优化策略的子策略总是最优的。满足此条件,即可以把问题分解为若干个可能解及每个解对应的子问题。该条件的物理意义在于纵向分解的子问题,独立求得的解是最优解。(貌似说反了,待修正)

动态规划(Dynamic Programming),这里的规划,是查表的意思。

Iterable<T>接口和动态规划,布布扣,bubuko.com

时间: 2024-10-13 19:48:51

Iterable<T>接口和动态规划的相关文章

Java之iterator迭代器和iterable接口

java.lang.Iterable java.util.Iterator Iterator是迭代器类,而Iterable是接口. 好多类都实现了Iterable接口,这样对象就可以调用iterator()方法. 一般都是结合着用,比如 HashMap类就实现了Iterable接口,而要访问或打印出Map中所有内容时,就可以这样: 1 Map hashMap =new HashMap(); 2 Iterator iter = hashMap.iterator(); 3 while(iter.ha

13.Java中Comparable接口,Readable接口和Iterable接口

1.Comparable接口 说明:可比较(可排序的) 例子:按照MyClass的y属性进行生序排序 class MyClass implements Comparable<MyClass>{ private int x; private int y; public MyClass(int x,int y){ this.x=x; this.y=y; } @Override public int compareTo(MyClass o) { //按照y进行升序排序 return y<o.y

Iterator、Iterable接口的使用及详解

Java集合类库将集合的接口与实现分离.同样的接口,可以有不同的实现. Java集合类的基本接口是Collection接口.而Collection接口必须实现Iterator接口. 以下图表示集合框架的接口,java.lang以及java.util两个包里的.其他部分可以从左向右看,比如Collection的Subinterfaces有List,Set以及Queue等. package java.util; /** * An iterator over a collection. Iterato

大杂烩 -- Iterator 和 Iterable 区别和联系

基础大杂烩 -- 目录 用Iterator模式实现遍历集合  Iterator模式是用于遍历集合类的标准访问方法.它可以把访问逻辑从不同类型的集合类中抽象出来,从而避免向客户端暴露集合的内部结构. 例如,如果没有使用Iterator,遍历一个数组的方法是使用索引: for(int i=0; i<array.size(); i++) { ... get(i) ... } 而访问一个链表(LinkedList)又必须使用while循环: while((e=e.next())!=null) { ...

iterator &amp; iterable

一. java.lang.Iterable java.util.Iterator Iterator是迭代器类,而Iterable是接口. 好多类都实现了Iterable接口,这样对象就可以调用iterator()方法. 一般都是结合着用,比如 HashMap类就实现了Iterable接口,而要访问或打印出Map中所有内容时,就可以这样: HashMap hashMap; Iterator iter = hashMap.iterator(); while(iter.hashNext()) { St

Iterator 和 Iterable 差别和联系

用Iterator模式实现遍历集合  Iterator模式是用于遍历集合类的标准訪问方法.它能够把訪问逻辑从不同类型的集合类中抽象出来,从而避免向client暴露集合的内部结构. 比如,假设没有使用Iterator,遍历一个数组的方法是使用索引: for(int i=0; i<array.size(); i++) { ... get(i) ... } 而訪问一个链表(LinkedList)又必须使用while循环: while((e=e.next())!=null) { ... e.data()

Iterator 和 Iterable 区别和联系

用Iterator模式实现遍历集合  Iterator模式是用于遍历集合类的标准访问方法.它可以把访问逻辑从不同类型的集合类中抽象出来,从而避免向客户端暴露集合的内部结构. 例如,如果没有使用Iterator,遍历一个数组的方法是使用索引: for(int i=0; i<array.size(); i++) { ... get(i) ... } 而访问一个链表(LinkedList)又必须使用while循环: while((e=e.next())!=null) { ... e.data() ..

java基础巩固系列(九):持有对象之间的使用与关系(Iterable、Collection、List、Queue、Set、Map、Stack)

总:Java提供了一套比较完整的容器类,基本类型是:List.Set.Queue.Map,这些对象类型称为集合类. 一.接口继承关系: Iterable接口,在java.lang包中,Collection.List.Queue.Set接口继承Iterable接口 可以看出来,List.Queue.Set这三个接口是在java.util包中,继承自Collection接口 Map接口不继承Collection接口,也不继承其它接口 二.Iterable与Iterator的关系 Iterable属于

iterator与iterable

用Iterator模式实现遍历集合Iterator模式是用于遍历集合类的标准访问方法.它可以把访问逻辑从不同类型的集合类中抽象出来,从而避免向客户端暴露集合的内部结构.例如,如果没有使用Iterator,遍历一个数组的方法是使用索引:for(int i=0; i<array.size(); i++) { ... get(i) ... } 而访问一个链表(LinkedList)又必须使用while循环:while((e=e.next())!=null) { ... e.data() ... } 以