2017-07-05 29 views
-1

我想知道为什么什么时候构建一个LinkedHashMap客户端代码可以指定是否访问命令期望loadFactor? 这个设计有什么特别的原因,而不是使用默认的因子?为什么在构造函数中指定访问顺序时传递加载因子?

+1

他们可能会决定添加另一个构造函数(用于构造实例的所有可能方法的组合爆炸)并没有带来它的重量。 –

+0

如果您查看[构造函数列表](https://docs.oracle.com/javase/8/docs/api/java/util/LinkedHashMap.html#constructor.summary),您会注意到它已启动(')'no-arg版本,并且具有'(int initialCapacity,float loadFactor,boolean accessOrder)'的完整版本,以及两个便利版本。要有这3个参数的所有组合的构造函数,应该有4个更多的构造函数,并且他们决定不这样做,可能是因为如果所有8个组合都存在,会导致混淆构造函数。 – Andreas

+0

@Andreas:这个类是用来作为LRU的。为了实现这个目标,我们需要能够指定驱逐策略(插入vs访问顺序)。考虑到缺省值插入时没有任何加载因子的配置,我发现当我们指定顺序时,他们选择指定对哈希表性能如此重要的事情是非常奇怪的事情?这种改变是如何基于驱逐政策的? – Jim

回答

0

有时候事情会“发生”。除此之外:

设计库API时,必须平衡简单性和“功能计数”。含义:当然,你可以创建大量的构造函数,允许你设置所有的标志。但是这会导致构造函数的个数增加。而这通常不是你想要的。

在这个意义上:如果你真的愿意碰插入顺序标志链接的哈希映射......那么你已经采取了“非常特别的路线”。然后API的创建者(可能)决定给你一个特殊的构造函数,而不是更高的数字。

+0

你所说的都是明智的,但他们在文档中声明所使用的用法是一个LRU。 LRU是一个比哈希表更高层次的抽象。所以我认为具有专门用于LRU的构造函数并留下合理的默认值是有道理的。无论如何,我想知道我是否错过了一些东西 – Jim

相关问题