![]() |
1
115
从 Java Collections API Design FAQ :
更新: 我认为这句话回答了大多数问题。值得强调的是,条目集合不是一个特别有用的抽象。例如:
允许:
(假设一个
可以说你可以说
值得注意的是
主要原因
|
![]() |
2
10
我猜 为什么? 是主观的。
在C_里,我想
在Pharo Smalltak中:
但有些方法存在不对称性。例如,
所以它确实是可行的,但是会导致一些关于类层次结构的其他问题。 更好的是主观的。 |
![]() |
3
9
虽然你已经得到了很多答案,相当直接地涵盖了你的问题,但我认为退一步,更一般地看待这个问题可能是有用的。也就是说,不要特别关注Java库是如何编写的,看看它为什么这样写。 这里的问题是只继承模型 一 共同点的类型。如果你挑选出两件看起来都像“收藏”的东西,你可能会挑选出8件或10件他们有共同点的东西。如果你选择一对不同的“收藏类”东西,它们也会有8到10个共同点——但它们不会是 相同的 8或10件作为第一对。 如果你看一打左右不同的“收藏类”东西,几乎每一个都可能有8到10个共同的特征,至少有一个是相同的,但是如果你看一下 每一个 其中一个,你几乎什么都没有。 这是一种继承(特别是单继承)建模不好的情况。在哪些是真正的集合,哪些不是集合之间没有明确的界限——但是如果你想定义一个有意义的集合类,你就不得不把其中的一些排除在外。如果只保留其中的一些,那么collection类将只能提供相当稀疏的接口。如果你漏掉更多,你就能给它一个更丰富的界面。 有些人还选择说:“这种类型的集合支持操作x,但不允许使用它,方法是从定义x的基类派生,但尝试使用派生类x失败(例如抛出异常)。 这仍然留下了一个问题:几乎不管你漏掉了哪些内容,也不管你放了哪些内容,你都必须在哪些类在哪些类在哪些类在哪些类之间划出一条硬线。不管你在哪里画那条线,你都会在一些东西之间留下一个清晰的,相当人为的划分 相当地 类似的。 |
![]() |
4
3
克莱特斯的回答很好,但我想增加一个语义方法。要将两者结合起来毫无意义,请考虑这样的情况:通过集合接口添加一个键值对,并且该键已经存在。映射接口只允许一个与键关联的值。但是,如果使用相同的键自动删除现有条目,则在添加之后,集合的大小与之前相同-这对于集合来说是非常意外的。 |
![]() |
5
2
Java集合被破坏。缺少一个接口,即关系接口。因此,映射扩展关系扩展集。关系(也称为多映射)具有唯一的名称-值对。映射(也称为“函数”),有唯一的名称(或键),当然映射到值。序列扩展映射(其中每个键都是整数>0)。行李(或多组)扩展地图(其中每个键是一个元素,每个值是元素在行李中出现的次数)。 这种结构允许一系列“集合”的交集、并集等。因此,层次结构应该是:
Sun / Oracle / Java PPL -请下次正确。谢谢。 |
![]() |
6
1
如果你看一下各自的数据结构,你很容易就能猜出为什么
同样的论点也适用
有一些方法可以迭代存储在
|
![]() |
7
0
实际上,如果是
我不想拥有的原因
|
![]() |
8
0
|
![]() |
9
-1
直截了当。 集合是一个只需要一个对象的接口,而映射需要两个对象。
|
|
user29759326 · 如何返回递归函数中的最后一个值? 7 月前 |
|
malife89 · 将java中的字符串读取为正确的日期格式 7 月前 |
![]() |
Tim · 在java中,有没有更快的方法将字节数组写入文件? 7 月前 |
![]() |
rudraraj · java中未声明最终变量 8 月前 |
![]() |
Bala Ji · 以下BFS的实施效率如何? 8 月前 |