内部类(待补充)

 1、内部类可以用多个实例,每个实例都有自己的状态信息,并且与其他外围对象的信息相互独立。

2、在单个外围类中,可以让多个内部类以不同的方式实现同一个接口,或者继承同一个类。

3、创建内部类对象的时刻并不依赖于外围类对象的创建。

4、内部类并没有令人迷惑的“is-a”关系,他就是一个独立的实体。

5、内部类提供了更好的封装,除了该外围类,其他类都不能访问。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据题目要求,我们需要实现一个支持懒加载、能够遍历所有数据的工具类。具体实现方法如下: ```java public class LazyIterator<T> implements Iterable<T> { private final ValueLoader<T> valueLoader; private long offset = 0; private int limit = 100; private List<T> buffer = new ArrayList<>(); private boolean endOfData = false; public LazyIterator(ValueLoader<T> valueLoader) { this.valueLoader = valueLoader; } public void setLimit(int limit) { this.limit = limit; } @Override public Iterator<T> iterator() { return new Itr(); } private class Itr implements Iterator<T> { private int cursor = 0; @Override public boolean hasNext() { if (cursor >= buffer.size() && !endOfData) { buffer = valueLoader.load(offset, limit); if (buffer == null) { endOfData = true; return false; } else { offset += limit; cursor = 0; } } return cursor < buffer.size(); } @Override public T next() { if (!hasNext()) { throw new NoSuchElementException(); } return buffer.get(cursor++); } } } ``` 我们定义了一个 `LazyIterator` 类,并实现了 `Iterable` 接口,因此可以使用 foreach 语句遍历所有数据。在构造函数中,我们需要传入一个 `ValueLoader` 对象,用于获取数据。 在 `Itr` 内部类中,我们实现了 `Iterator` 接口,并重写了 `hasNext` 和 `next` 方法。每次调用 `hasNext` 方法时,会检查缓冲区是否还有数据,如果没有,则调用 `ValueLoader` 的 `load` 方法加载数据,如果返回 null,则认为已经遍历完成;否则将加载的数据保存到缓冲区中,并更新偏移量和游标位置,最后返回当前游标位置是否小于缓冲区大小,从而判断是否还有数据。 需要注意的是,我们在 `hasNext` 方法中判断 `cursor >= buffer.size()`,而不是 `cursor == buffer.size()`,这是因为当缓冲区中的数据被遍历完之后,需要再次调用 `ValueLoader` 的 `load` 方法加载数据,此时 `cursor` 的值已经等于缓冲区大小了。 此外,我们还提供了一个 `setLimit` 方法,用于设置每次加载数据的数量,默认为 100。可以根据实际情况进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值