Tag: 迭代器

Java迭代器在参数化类型的空集合上

在Java中,我需要从我的方法返回一个Iterator。 我的数据来自另一个通常可以给我一个迭代器的对象,所以我可以返回它,但在某些情况下,底层数据是null。 为了保持一致性,我希望在这种情况下返回一个“空”迭代器,这样我的调用者就不必测试null。 我想写一些类似的东西: public Iterator iterator() { if (underlyingData != null) { return underlyingData.iterator(); // works } else { return Collections.emptyList().iterator(); // compiler error } } 但Java编译器抱怨返回的Iterator而不是Iterator 。 转换为(Iterator)也不起作用。

Java“for”语句实现可防止垃圾回收

UPD 21.11.2017:该错误已在JDK中修复,请参阅Vicente Romero的评论 概要: 如果for语句用于任何Iterable实现,则集合将保留在堆内存中,直到当前作用域(方法,语句体)结束,即使您没有对集合的任何其他引用,也不会进行垃圾回收。应用程序需要分配新内存。 http://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8175883 https://bugs.openjdk.java.net/browse/JDK-8175883 例子 : 如果我有下一个代码,它会分配一个包含随机内容的大字符串列表: import java.util.ArrayList; public class IteratorAndGc { // number of strings and the size of every string static final int N = 7500; public static void main(String[] args) { System.gc(); gcInMethod(); System.gc(); showMemoryUsage(“GC after the method body”); ArrayList strings2 = generateLargeStringsArray(N); showMemoryUsage(“Third allocation outside the method […]

我将如何在Java中迭代堆栈

我想知道如何在Stack类中使用迭代器。 如何为它创建迭代器类?

Java date iterator factory,其中的规则指定了如何计算间隔

我正在寻找一个Java类,我可以在其中指定一组日期规则,例如“每隔3个星期日”和“每隔一个月第一次出现星期一”。 我希望能够从中获得类似无限迭代器的东西(.next()将返回与规则集匹配的下一个日期)。 我想我自己可以自己构建它 – 但是日历很麻烦,而且感觉类似的东西已经存在了。 我讨厌成为重塑一个更快的轮子的人。 有人知道这样的事吗? 我一直在看JODA,它似乎为它奠定了基础,但似乎没有提供我想要的全部function..

在Java中使用一系列整数获取Iterator的最短路径

在Java中使用一系列整数获取迭代器的最短路径是什么? 换句话说,实现以下内容: /** * Returns an Iterator over the integers from first to first+count. */ Iterator iterator(Integer first, Integer count); 就像是 (first..first+count).iterator()

外部迭代器与内部迭代器

什么是Java中的外部和内部迭代器?

关闭java.util.Iterator

我已经使用应该使用close()方法在最后发布的资源实现了自定义java.util.Iterator 。 该资源可以是java.sql.ResultSet , java.io.InputStream等…… public interface CloseableIterator extends Iterator { public void close(); } 使用此迭代器的某些外部库可能不知道必须关闭它。 例如: public boolean isEmpty(Iterable myiterable) { return myiterable.iterator().hasNext(); } 在那种情况下,有没有办法关闭这个迭代器? 更新:非常感谢您当前的答案。 我会给每个人一个(+1)。 当hasNext()返回false时,我已经关闭了Iterator。 我的问题是当循环迭代在最后一次迭代之前中断时,如我的例子中所示。

为什么iterator.remove不会抛出ConcurrentModificationException

iterator.remove与list.remove的不同之处在于,当list.remove抛出时,迭代器不会抛出exception吗? 最后两者都在修改集合大小。 请忽略此处的线程。 我只是谈论for-each循环和迭代器循环。 据我所知 – 每个循环仅在内部创建迭代器。 我很迷惑。

访谈:为集合集合设计迭代器

为java中的集合集合设计迭代器。 迭代器应隐藏嵌套,允许您迭代属于所有集合的所有元素,就像使用单个集合一样

用Java实现卡片组

所以我有一个实验室(我们被允许寻求外界的帮助,所以我在这里经过多次努力)我们必须实施一副卡片。 我们必须使用枚举类来创建num 适合西装: public enum Suits { CLUBS, HEARTS, DIAMONDS, SPADES } 对于数字: public enum Numerals { DEUCE(2), THREE(3), FOUR(4), FIVE(5), SIX(6), SEVEN(7), EIGHT(8), NINE(9), TEN(10), JACK(11), QUEEN(12), KING(13), ACE(14); } 我的卡类非常简单,但我不确定这两个代码块: public int compareTo (Card aCard){ if (aCard.aNumeral.equals(this.aNumeral) && aCard.aSuit.equals(this.aSuit)){ return 0; } else { return -1; } } 和 public boolean equals (Card […]