我正在阅读有关Java Collections的this文档,并决定按以下方法测试NavigableSet接口的两种方法。正如文档对descendingSet()
所说的那样,返回的“视图”由原始NavigableSet支持,因此对降序集的更改也反映在原始集中。 。测试这两种方法后,我没有发现使用DescendingSet()方法对原始集中进行任何更改。请解释为什么?
import java.util.Iterator;
import java.util.NavigableSet;
import java.util.TreeSet;
public class NavigableSetLearning {
public static void main(String[] args) {
NavigableSet<String> original = new TreeSet<String>();
original.add("1");
original.add("2");
original.add("3");
original.add("4");
//Usage of Descending Set Method
NavigableSet reverse = original.descendingSet();
System.out.println(original);
System.out.println(reverse);
System.out.println(original);
// Usage of Descending Iterator Method
/*Iterator it = original.iterator();
while(it.hasNext()){
System.out.print("Original"+it.next()+"\n");
}
Iterator reverse = original.descendingIterator();
//System.out.println(original);
while(reverse.hasNext()){
System.out.println("Reversed"+reverse.next()+",");
}
Iterator itAgain = original.iterator();
while(itAgain.hasNext()){
System.out.println("Original Again"+itAgain.next()+",");
}
*/
}
}
我得到的输出如下:
[1, 2, 3, 4]
[4, 3, 2, 1]
[1, 2, 3, 4] // Was expecting change here as per the doc
最佳答案
这意味着,如果将元素删除或添加到从original
派生的反向集合中,则对集合内容的修改将反映在第一个集合中。这是同一组的替代视图。
在删除或添加元素时,或者在调用descendingSet()
时,不会违反为每个集合指定的顺序。