Java编程教程-Java TreeSet类

Java TreeSet类实现了使用树进行存储的Set接口。它继承了AbstractSet类并实现了NavigableSet接口。TreeSet类的对象按升序存储。

关于Java TreeSet类的重要点有:

  • Java TreeSet类仅包含唯一元素,就像HashSet一样。

  • Java TreeSet类的访问和检索时间非常快。

  • Java TreeSet类不允许空元素。

  • Java TreeSet类是非同步的。

  • Java TreeSet类维护升序。

  • Java TreeSet类仅包含唯一元素,就像HashSet一样。

  • Java TreeSet类的访问和检索时间非常快。

  • Java TreeSet类不允许空元素。

  • Java TreeSet类是非同步的。

  • Java TreeSet类维护升序。

  • TreeSet只能允许可比较的泛型类型。例如,StringBuffer类实现了Comparable接口。

# TreeSet类的内部工作原理

TreeSet使用二叉搜索树实现,它是自平衡的,就像红黑树一样。因此,搜索、删除和添加等操作的时间复杂度为O(log(N))。这是因为二叉搜索树是自平衡的,它确保了树的高度对于所有这些操作都不会超过O(log(N))。因此,它是一种有效的数据结构,用于存储排序的大量数据并对其执行操作。

# TreeSet类的同步

如上所述,TreeSet类不是同步的。这意味着如果多个线程同时访问一个TreeSet,并且其中一个访问线程对其进行修改,那么必须手动进行同步。

通常情况下,可以通过对封装集合的某个对象进行同步来实现。但是,在找不到这样的对象的情况下,可以使用Collections.synchronizedSet()方法对集合进行包装。建议在创建时使用该方法,以避免对集合进行不同步的访问。以下代码片段显示了相同的情况。

TreeSet treeSet = new TreeSet();Set syncrSet = Collections.synchronziedSet(treeSet);

# TreeSet类的层次结构

如上图所示,Java TreeSet类实现了NavigableSet接口。NavigableSet接口按层次顺序扩展了SortedSet、Set、Collection和Iterable接口。

# TreeSet类的声明

让我们看一下java.util.TreeSet类的声明。

public class TreeSet<E> extends AbstractSet<E> implements NavigableSet<E>, Cloneable, Serializable

# Java TreeSet类的构造函数

构造函数

描述

TreeSet()

构造一个空的树集,根据树集的自然顺序按升序排序。

TreeSet(Collection<? extends E> c)

构造一个包含集合c中元素的新树集。

TreeSet(Comparator<? super E> comparator)

构造一个空的树集,根据给定的比较器进行排序。

TreeSet(SortedSet<E> s)

构造一个包含给定SortedSet中元素的TreeSet。

# Java TreeSet类的方法

方法

描述

boolean add(E e)

如果该集合中尚未包含指定元素,则将其添加到集合中。

boolean addAll(Collection<? extends E> c)

将指定集合中的所有元素添加到该集合中。

E ceiling(E e)

返回集合中与指定元素相等或大于它的最小元素;如果不存在这样的元素,则返回null。

Comparator<? super E> comparator()

返回用于排序的比较器。

Iterator descendingIterator()

以降序遍历元素的迭代器。

NavigableSet descendingSet()

返回按照相反顺序排列的元素集合。

E floor(E e)

返回集合中与指定元素相等或小于它的最大元素;如果不存在这样的元素,则返回null。

SortedSet headSet(E toElement)

返回小于指定元素的元素组成的子集。

NavigableSet headSet(E toElement, boolean inclusive)

返回小于或等于(如果inclusive为true)指定元素的元素组成的子集。

E higher(E e)

返回集合中与指定元素相等或大于它的最小元素;如果不存在这样的元素,则返回null。

Iterator iterator()

以升序遍历元素的迭代器。

E lower(E e)

返回集合中与指定元素相等或小于它的最大元素;如果不存在这样的元素,则返回null。

E pollFirst()

检索并移除最低(第一个)元素。

E pollLast()

检索并移除最高(最后一个)元素。

Spliterator spliterator()

创建一个后期绑定且快速失败的元素Spliterator。

NavigableSet subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive)

返回处于给定范围内的元素的子集。

SortedSet subSet(E fromElement, E toElement))

返回处于给定范围内的元素的子集,包括fromElement但不包括toElement。

SortedSet tailSet(E fromElement)

返回大于或等于指定元素的元素组成的子集。

NavigableSet tailSet(E fromElement, boolean inclusive)

返回大于或等于(如果inclusive为true)指定元素的元素组成的子集。

boolean contains(Object o)

如果该集合包含指定的元素,则返回true。

boolean isEmpty()

如果该集合不包含任何元素,则返回true。

boolean remove(Object o)

如果集合中存在指定的元素,则从集合中移除它。

void clear()

从集合中移除所有元素。

Object clone()

返回此TreeSet实例的浅表副本。

E first()

返回当前排序集中的第一个(最低)元素。

E last()

返回当前排序集中的最后一个(最高)元素。

int size()

返回集合中的元素数量。

# Java TreeSet示例

Java TreeSet示例1:

让我们看一个简单的Java TreeSet示例。

文件名:TreeSet1.java

import java.util.*;
class TreeSet1 { public static void main(String args[]) { // Creating and adding elements TreeSet<String> al = new TreeSet<String>(); al.add("Ravi"); al.add("Vijay"); al.add("Ravi"); al.add("Ajay");  // Traversing elements Iterator<String> itr = al.iterator(); while(itr.hasNext()) { System.out.println(itr.next()); } }}

输出:

AjayRaviVijay

Java TreeSet示例2:

让我们看一个按降序遍历元素的示例。

文件名:TreeSet2.java​​​​

import java.util.*;
class TreeSet2 { public static void main(String args[]) { TreeSet<String> set = new TreeSet<String>(); set.add("Ravi"); set.add("Vijay"); set.add("Ajay");  System.out.println("Traversing elements through Iterator in descending order"); Iterator<String> i = set.descendingIterator(); while(i.hasNext()) { System.out.println(i.next()); } }}

输出:​​​​​​​

Traversing elements through Iterator in descending orderVijayRaviAjay

文件名:TreeSet3.java

import java.util.*;
class TreeSet3 { public static void main(String args[]) { TreeSet<Integer> set = new TreeSet<Integer>(); set.add(24); set.add(66); set.add(12); set.add(15);  System.out.println("Lowest Value: " + set.pollFirst()); System.out.println("Highest Value: " + set.pollLast()); }}​​​​​​​

输出:​​​​​​​

Lowest Value: 12Highest Value: 66

Java TreeSet示例4:

在这个示例中,我们执行了各种NavigableSet操作。

文件名:TreeSet4.java​​​​​​​

import java.util.*;
class TreeSet4 { public static void main(String args[]) { TreeSet<String> set = new TreeSet<String>(); set.add("A"); set.add("B"); set.add("C"); set.add("D"); set.add("E");  System.out.println("Initial Set: " + set);  System.out.println("Reverse Set: " + set.descendingSet());  System.out.println("Head Set: " + set.headSet("C", true));  System.out.println("SubSet: " + set.subSet("A", false, "E", true));  System.out.println("TailSet: " + set.tailSet("C", false)); }}

输出:​​​​​​​

Initial Set: [A, B, C, D, E]Reverse Set: [E, D, C, B, A]Head Set: [A, B, C]SubSet: [B, C, D, E]TailSet: [D, E]

Java编程教程-Java TreeSet类Java编程教程-Java TreeSet类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值