📅  最后修改于: 2023-12-03 15:31:29.297000             🧑  作者: Mango
在 Java 集合框架中,NavigableSet
接口继承自 SortedSet
接口,并且在其基础上提供了一些额外的导航方法 (Navigation methods),例如 ceiling()
、floor()
、higher()
、lower()
等。unmodifiableNavigableSet()
方法是 Collections
类中的一个静态方法,用于创建一个不可修改的 NavigableSet
,下面详细介绍该方法及实例。
public static <T> NavigableSet<T> unmodifiableNavigableSet(NavigableSet<? extends T> s)
s
: 要创建不可修改 NavigableSet
的原始集合。返回一个不可修改的 NavigableSet
,该集合的元素是传递进来原始集合的子集。
import java.util.Collections;
import java.util.NavigableSet;
import java.util.TreeSet;
public class UnmodifiableNavigableSetExample {
public static void main(String[] args) {
NavigableSet<String> originalSet = new TreeSet<>();
originalSet.add("Alice");
originalSet.add("Bob");
originalSet.add("Charlie");
originalSet.add("David");
originalSet.add("Eva");
System.out.println("Original set: " + originalSet);
// Create an unmodifiableNavigableSet from the original set
NavigableSet<String> unmodifiableSet = Collections.unmodifiableNavigableSet(originalSet);
System.out.println("Unmodifiable set: " + unmodifiableSet);
// Try to add an element to the unmodifiable set, it will throw an exception
try {
unmodifiableSet.add("Frank");
} catch (UnsupportedOperationException ex) {
System.out.println("Caught an unsupported operation exception: " + ex.getMessage());
}
// Try to remove an element from the unmodifiable set, it will also throw an exception
try {
unmodifiableSet.remove("Alice");
} catch (UnsupportedOperationException ex) {
System.out.println("Caught an unsupported operation exception: " + ex.getMessage());
}
// The original set is still mutable
originalSet.add("Frank");
System.out.println("Original set after adding \"Frank\": " + originalSet);
System.out.println("Unmodifiable set after adding \"Frank\": " + unmodifiableSet);
}
}
在上面的示例代码中,我们首先创建了一个 NavigableSet
实例 originalSet
,并将一些元素添加到其中。接着,我们使用 Collections.unmodifiableNavigableSet()
方法来创建一个不可修改的 NavigableSet
unmodifiableSet
。然后,我们尝试向 unmodifiableSet
中添加元素和从 unmodifiableSet
中删除元素,这两个操作都将抛出 UnsupportedOperationException
。最后,我们向 originalSet
中添加新元素,并输出 originalSet
和 unmodifiableSet
中的所有元素。
Original set: [Alice, Bob, Charlie, David, Eva]
Unmodifiable set: [Alice, Bob, Charlie, David, Eva]
Caught an unsupported operation exception: null
Caught an unsupported operation exception: null
Original set after adding "Frank": [Alice, Bob, Charlie, David, Eva, Frank]
Unmodifiable set after adding "Frank": [Alice, Bob, Charlie, David, Eva, Frank]
从结果可以看出,Collections.unmodifiableNavigableSet()
方法确实创建了一个不可修改的 NavigableSet
,在尝试修改该集合时,会抛出 UnsupportedOperationException
。注意,尽管 unmodifiableSet
是不可修改的,但原始集合 originalSet
仍然是可变的。