我正在通过Java test并遇到了以下问题(№8):
Which statement is true for the class java.util.ArrayList?
A. The elements in the collection are ordered.
B. The collection is guaranteed to be immutable.
C. The elements in the collection are guaranteed to be unique.
D. The elements in the collection are accessed using a unique key.
我回答了A,这是真的。但为什么D不是真的?我打开ArrayList的源代码并找到以下代码块:
/**
* The array buffer into which the elements of the ArrayList are stored.
* The capacity of the ArrayList is the length of this array buffer. Any
* empty ArrayList with elementData == EMPTY_ELEMENTDATA will be expanded to
* DEFAULT_CAPACITY when the first element is added.
*/
private transient Object[] elementData;
因为,我们可以使用唯一键(元素索引)访问ArrayList的任何元素。为什么这样的推理是错误的?
答案 0 :(得分:5)
你确实是对的:可以使用唯一键加入列表;限制是你没有任意选择密钥。
事实上,地图也被称为"关联数组",强调List
和Map
之间的等价。
至于为什么在考试中没有接受这一点,这是因为在编写考试题目时缺乏关注。根据个人经验,我可以证明,需要很多的护理才能正确地进行考试。
答案 1 :(得分:2)
使用唯一键访问集合中的元素。
这将描述Map
而不是List
。我会问自己同样的问题,实际上数组索引可以被认为是"键"。但是,由于这样的密钥是隐式唯一的,因此最后一个语句似乎更能描述地图结构。
答案 2 :(得分:1)
ArrayList的元素可以通过它们的索引访问列表,而不是键。
你问为什么这些元素不能被"唯一键" ...答案就是语言定义不允许它。 (您可能会误认为密钥的索引。)
精化:索引不是关键。索引指定结构中的位置,键需要在结构中搜索该键的值。你会感到困惑,因为这些内容都是独一无二的......但它们不是键
答案 3 :(得分:1)
unique key
只是表示index
表示java.util.ArrayList的元素,没有2个不同的元素具有相同的index
。对了!?
答案 4 :(得分:1)
当您使用键/值时,无论地图中的其他条目如何变化,您都可以通过查找相同的键来访问该值。
索引不是密钥,因为每次添加或删除条目时它都可以更改。如果您继续从列表的开头删除,则可以使用get(0)
访问列表中的每个元素,这显然不是唯一值。