Java 如何在迭代时系统地清空一个iterable对象?

Java 如何在迭代时系统地清空一个iterable对象?,java,iterable,Java,Iterable,我有一个方法,它接受任何具有未知类型T的iterable对象类型,并循环通过它,从中取出项目,然后将其放入另一个数据结构中。我需要在运行时删除旧iterable对象中的每个项,以便按排序顺序重新添加这些项 循环后,我尝试在对象上使用.clear(),但不能保证有一个clear方法。那么,我如何在浏览时删除项目,或者创建一个具有相同类型但没有值的新对象,这样我就可以重新添加所有内容,而只知道该对象是可伸缩的 public class PriorityQueue<K extends Compa

我有一个方法,它接受任何具有未知类型T的iterable对象类型,并循环通过它,从中取出项目,然后将其放入另一个数据结构中。我需要在运行时删除旧iterable对象中的每个项,以便按排序顺序重新添加这些项

循环后,我尝试在对象上使用
.clear()
,但不能保证有一个clear方法。那么,我如何在浏览时删除项目,或者创建一个具有相同类型但没有值的新对象,这样我就可以重新添加所有内容,而只知道该对象是可伸缩的

public class PriorityQueue<K extends Comparable<? super K>,V> {

  public static <K> void PriorityQueueSort(Iterable<? extends K> list,
        PriorityQueue<? super K, ?> queue) {

      for (K item : list) {
          queue.insert(item, null);
      }

      list.clear();
  }
}

public class PriorityQueue不使用for-each循环,而是使用显式的
迭代器
对象并:

Iterator iter=list.Iterator();
while(iter.hasNext()){
K项=iter.next();
queue.insert(项,空);
iter.remove();
}

请记住,并不是每个
迭代器
实现都支持对象删除(例如,只读集合不支持对象删除)。

您必须使用遍历列表。迭代器支持删除方法。

所有集合都是可编辑的,但事实并非如此。因此,您甚至不能期望从生成迭代器项的数据源中删除某些内容总是有意义的。就像这个非常复杂的hello world示例:

Iterable<Character> myIterable = new Iterable<Character>() {

    @Override
    public Iterator<Character> iterator() {
        Iterator<Character> it = new Iterator<Character>() {

            private String hello = "Hello World";
            private int counter = 0;

            @Override
            public boolean hasNext() {
                return counter < hello.length();
            }

            @Override
            public Character next() {
                return hello.charAt(counter++);
            }

            @Override
            public void remove() {
                throw new UnsupportedOperationException();
            }

        };
        return it;
    }
};

for (Character c : myIterable) {
    System.out.print(c);
}
Iterable myIterable=newiterable(){
@凌驾
公共迭代器迭代器(){
迭代器it=新迭代器(){
私有字符串hello=“hello World”;
专用整数计数器=0;
@凌驾
公共布尔hasNext(){
返回计数器
没有支持Iterable的集合。它只是一个“迭代器提供程序”,甚至只有一个字符串(我们不能从字符串中删除字符,字符串是不可变的)


因此,不能“清除任何iterable”,并且不是每个迭代器都支持删除项。

请查看此处的答案,以获取
remove()
Iterable<Character> myIterable = new Iterable<Character>() {

    @Override
    public Iterator<Character> iterator() {
        Iterator<Character> it = new Iterator<Character>() {

            private String hello = "Hello World";
            private int counter = 0;

            @Override
            public boolean hasNext() {
                return counter < hello.length();
            }

            @Override
            public Character next() {
                return hello.charAt(counter++);
            }

            @Override
            public void remove() {
                throw new UnsupportedOperationException();
            }

        };
        return it;
    }
};

for (Character c : myIterable) {
    System.out.print(c);
}