据我所知,以下是删除ArrayList
中的元素的步骤。
null
为什么不只是将我们要删除的元素设置为null
?只需一步。
有人可以解释上述方案的优点吗?预先感谢。
答案 0 :(得分:4)
因为它们不相同(我们删除"c"
):
["a", "b", "d", "e"]
["a", "b", null, "d", "e"]
删除和替换之间有很大的区别:
"d"
可从索引2
访问(从3
移动)。"d"
可从索引4
访问(不变)。答案 1 :(得分:1)
...因为这就是列表的工作方式。许多用例需要这种动态调整大小的行为,因此Java has an interface for the List concept。 ArrayList是List的几种实现之一,LinkedList是List的另一种实现。
我们已经有了您要描述的行为,the Array-因此,在需要该行为的地方,可以使用{{1}}。
答案 2 :(得分:1)
为什么不只是将要删除的元素设置为null?
将元素设置为null不会删除它正在替换一个元素。
该方法还有另一个问题,如果列表中的null
表示该索引处的元素被“删除”,那么如果我想实际存储null
作为元素怎么办?如何区分删除的元素和实际的null
元素?
利用List<T>
API中的remove
方法,不要尝试重新发明轮子,因为它们会尽其所能。
答案 3 :(得分:1)
ArrayLists就像具有不同之处的数组-它们是可调整大小的(在此示例中无关紧要)。
考虑以下数组:[ref1,ref2,ref3,ref4]
,其中ref1:4是对某些对象的引用。这意味着它们不包含对象本身,它们仅指向对象。现在,如果您要删除ref2,例如,通过将其声明为null来删除它,这意味着它现在不会指向任何对象(ref2 = null
),但这并不意味着该引用本身会消失。您的新array(ArrayList)现在为[ref1,null,ref3,ref4]
。你看?替换和删除之间有区别。...