TreeSet类是一个模板类,类似于ArrayList类。set充当一组元素的容器,并通过其contains()方法支持快速搜索。TreeSet< e>类的关键方法有
添加(E项)布尔包含(E项)无效删除(E项)
关于add()方法的一个重要注意事项:如果集合已经包含一个等于item的元素,则item不会被添加到集合中,并且add()返回false。
TreeSet以一种称为二叉搜索树的特殊结构形式存储其数据。树是由节点组成的数据结构,每个节点都连接到其他节点,称为子节点。在二叉搜索树中,每个节点包含一个数据项,父节点和子节点中的数据项遵循特殊的排序规则。如果父节点包含特定的数据值,则该父节点的左子节点(以及该左子节点的赢博体育后代节点)将包含较小的数据值。同样,右子节点及其赢博体育子节点将包含更大的数据值。
在二叉搜索树中搜索项和插入新项都可以有效地实现。要搜索项,我们从树的顶部开始,并将顶部节点中的数据值与我们正在搜索的值进行比较。这种比较会告诉我们去哪里查找:如果我们要查找的项小于数据值,我们知道我们要查找的项将在左子树中找到。要插入一个新项,我们只需对该项进行搜索,并让搜索运行,直到它从树的末端掉下来。在搜索退出树的地方,我们附加一个新节点并将数据项放入其中。
因为TreeSet是一个容器,所以很自然地想要建立一个循环来迭代它的内容。与数组或数组列表不同,TreeSet类不支持数组表示法,也没有get()方法。相反,TreeSet类有一个iterator()方法,该方法返回一个称为迭代器的特殊对象。迭代器类有hasNext()和next()方法,可以对原始TreeSet的内容进行迭代。
下面是一个示例来演示它是如何工作的。
//创建一个TreeSet来保存整数,然后用随机的整数填充。TreeSet<Integer>();随机rnd = new Random();for(int n = 0;n < 100;n++) T.add(rnd.nextInt(1000));//现在使用迭代器打印存储在T中的整数列表// iterator <Integer> I = T.iterator();而(I.hasNext ()) System.out.println (I.next ());
作为额外的奖励,迭代器将按照从最小到最大的排序顺序访问T中的项。
作为使用迭代器的替代方案,Java还提供了for循环的一种变体,称为增强的for循环,它可以轻松地迭代TreeSet中的元素。下面是用增强的for循环重写的最后一个示例。
//创建一个TreeSet来保存整数,然后用随机的整数填充。TreeSet<Integer>();随机rnd = new Random();for(int n = 0;n < 100;n++) T.add(rnd.nextInt(1000));//现在使用增强的for循环打印存储在T中的整数列表for(Integer n: T) System.out.println(n);
增强的for循环也可以用于数组列表和数组。
TreeMap是一种用于有效存储和检索数据的数据结构。存储在TreeMap中的每个项都以键和值的组合形式存储。项目是通过它们的键来查找的。
下面是TreeMap<K,V>类的主要方法。
V put(K key,V value) boolean containsKey(K key) V get(K key)
Put()在结构中放置一个新的键/值组合。如果在此键下的映射中先前存储了其他值,则put()将返回旧值;否则,put将返回null。
要遍历存储在map中的值,可以使用以下语法:
示例= new TreeMap<String,Integer>();example.add(“一”,1);example.add(“十三”,13);Iterator<Integer> iter = example.values().iterator();而(iter.hasNext ()) System.out.println (iter.next ());
在这些注释的顶部,您会发现一个按钮,用于下载包含一些示例代码的NetBeans项目。这个项目包含三个独立的程序,它们演示了我在这里介绍的一些类的用法。下面是这些程序的概述。
其中一个示例程序重做了产品跟踪器示例。这一次一个重要的变化是在库存类。Inventory类的原始版本使用了Item对象的ArrayList。find()和exists()方法必须通过ArrayList进行线性搜索。在这个版本的程序中,我们将用TreeMap替换ArrayList, TreeMap将项目名称映射到item对象。这样找东西就容易多了。
另一个例子程序更新了“这些数字列表是相同的吗?”这个问题。对于这个版本的问题,我们将通过将每个数字列表放入一个TreeSet来解决问题。通过使用contains()方法,我们可以快速搜索一个集合,看看它是否包含给定的数字。
最后一个示例程序解决了一个全新的问题:给定两个整数列表,找出这些列表共有的数字。这个解决方案再次利用TreeSet类中方便的contains()方法来快速确定给定的集合是否包含给定的数字。
本课程的主页包含Java类库在线文档的链接。如果您单击该链接,它将带您到有关Java类库中核心类的信息的顶级页面。类库中有很多类,所以这些类被组织成包。ArrayList, TreeSet和TreeMap类位于java中。util包。点击java的链接。Util将带您到该包的信息页面。在这里,您将看到包中的类列表。单击其中任何一个类的链接,将进入该类的文档页面。每个类的文档页面包含该类的简要概述和该类中的方法列表。单击任何一个方法的链接将进入该方法的文档。