NavigableSet表示Java集合框架中的一个可导航集
。NavigableSet接口继承自SortedSet接口
。它的行为类似于SortedSet,除了SortedSet的排序机制之外,我们还有可用的导航方法
。
例如,与SortedSet中定义的顺序相比,NavigableSet接口可以以相反的顺序导航集合
。可以按升序或降序
访问和遍历NavigableSet。
实现这个接口的类是TreeSet和ConcurrentSkipListSet
。
NavigableSet 层次结构:
NavigableSet 接口声明为
public interface NavigableSet<E> extends SortedSet<E>
NavigableSet 接口 创建对象:
因为NavigableSet是一个接口,所以不能创建NavigableSet类型的对象。我们总是需要一个扩展这个列表的类来创建对象。而且,在Java 1.5中引入泛型之后,可以限制可存储在NavigableSet中的对象类型。这个类型安全集可以定义为:
NavigableSet<Obj> set = new TreeSet<Obj> ();
为了向NavigableSet添加元素,我们可以使用add()方法。但是,TreeSet不保留插入顺序
。在内部,对于每个元素,值都按升序进行比较和排序。我们需要注意,不允许重复元素
,并且忽略所有重复元素
。此外,NavigableSet不接受空值
。
实例:
public static void main(String[] args) {
NavigableSet<String> ns = new TreeSet<String>();
// 添加元素
ns.add("深圳");
ns.add("广州");
ns.add("珠海");
ns.add("佛山");
ns.add("佛山"); // 忽略重复值
//ns.add(null); // 添加 null , 报错:空指针
System.out.println(ns);
}
输出:
[佛山, 广州, 深圳, 珠海]
添加元素后,如果想访问元素,可以使用内置方法,如contains()、first()、last()等。
实例:
public static void main(String[] args) {
NavigableSet<String> ns = new TreeSet<String>();
// 添加元素
ns.add("深圳");
ns.add("广州");
ns.add("珠海");
ns.add("佛山");
System.out.println(ns);
System.out.println("Navigable集合:"+ns);
System.out.println("Contains方法: "
+ " " + ns.contains("珠海"));
System.out.println("首元素" + ns.first());
System.out.println("尾元素" + ns.last());
}
输出:
[佛山, 广州, 深圳, 珠海]
Navigable集合:[佛山, 广州, 深圳, 珠海]
Contains方法: true
首元素佛山
尾元素珠海
可以使用remove()、pollFirst()、pollLast()方法从NavigableSet中删除这些值。
实例:
public static void main(String[] args) {
NavigableSet<String> ns = new TreeSet<String>();
// 添加元素
ns.add("深圳");
ns.add("广州");
ns.add("珠海");
ns.add("佛山");
System.out.println("Navigable集合:"+ns);
ns.remove("广州");
System.out.println("删除 广州后: :" + ns);
// 删除首元素
ns.pollFirst();
System.out.println("删除首元素后: " + ns);
// 删除尾元素
ns.pollLast();
System.out.println("删除尾元素后 " + ns);
}
输出:
Navigable集合:[佛山, 广州, 深圳, 珠海]
删除 广州后: :[佛山, 深圳, 珠海]
删除首元素后: [深圳, 珠海]
删除尾元素后 [深圳]