您的位置:首页 > 其它

为什么我们需要一个TreeMap中/ TreeSet中,当我们有SortedMap的/ SortedSet的?

2016-07-28 11:32 459 查看
1.接口不提供任何函数,它们只是定义在它提供的术语类的大致profile。但里面没有代码
SortedMap
/
SortedSet
那如何真正实现这一函数。
而作为事实上,你经常可以有多种方式来实现函数。想想接口
java.util.Set
:你可以把它作为一个
TreeSet
也可作为
HashSet
。通常情况下,有不同的HashSet的权衡可能提供平均更快的访问,而树集可能是在保持其项目的顺序更好。
往往不够,但是,开发人员并不真正关心细节 CodeGo.net,只要他们知道他们可以存放物品在一组,并检索它们。这个基本的想法,但不知道如何去实现它,是由接口定义。 这也是你不能实例化一个接口的原因。如果您尝试以下操作:

SortedSet<Integer> set = new SortedSet<Integer>();

这就是“SortedSet的”并没有真正意识到了一套本身,它只是定义了一个有序集合的一个必须条件提供 下面是一个人为的例子。想象一下,你想提供一个函数正整数的集合中的百分比。你可以定义
public double getPercentageOfPositives(Set<Integer> set) {
if (set.size() == 0) {
return 0.0;
}
int count = 0;
for (Iterator<Integer> iter = set.iterator(); iter.hasNext();) {
if (iter.next() > 0) count++;
}
return 100.0 * count / set.size();
}

在这里,你真的不关心是否给你一个
TreeSet
HashSet
。这并不重要原则render你只是调用
size()
方法和
iterator()
方法反正。所有你需要的是一个事实,即任何一组都将具有这些接口给你,
因此,签名只要求一
Set
,这是定义所有的类必须提供(其中包括)一个接口
size()
iterator()
方法。如果你写的是这样的:

public double getPercentageOfPositives(SortedSet<Integer> set) {
...
}

我有一个实例
HashSet
然后我忍不住“即使
HashSet
提供
size()
iterator()
为好。
:-( 在这个意义上,一个接口就好像是超一流的,它定义了所有的类都必须有它。但它并没有提供任何函数本身。 要回到你原来的例子
SortedSet
:这个接口不提供任何函数。定义了一个有序set必须提供。
TreeSet
是这样的
思路适用于
SortedMap


2. 正确的,我们需要的接口,当我们有课。
SortedMap
SortedSet
定义函数,它是用树
TreeMap
TreeSet


3.
SortedMap
/
SortedSet
界面,所以你不能实例化它们。
TreeMap
/
TreeSet
是类和可实例化的原因,为什么我们需要
SortedMap
/
SortedSet
是,有可能比Sun的基于树的人除外。

4. 答案是你的问题;
SortedMap
SortedSet
是接口。他们和属性,但他们实际上没有他们,所以他们不提供任何函数。
TreeMap
TreeSet
这些接口。
你的代码来介面好的OOP设计实践,而不是所有的签名应该是指接口而不是类。 所以,你会怎么做:

Object squishObjects(SortedMap map);

而不是 对象squishObjects(TreeMap中映射); 这样一来,如果有更好的
SortedMap
同时,你可以切换,在,而不必修改所有这一切依赖于
TreeMap
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: