我正在为一种算法编写伪代码来交换链表中的节点,并有一个快速的问题:.next &.getNext()之间是否存在差异?
一个是我知道的方法,但我想知道这些是否相同:
如果不是,你能解释为什么一个会比另一个更有效率吗?谢谢你!
Algorithm swap(x, y):
Node n <-- head
while( n.getNext() != x ) do
n <-- n.getNext()
Node v <-- y.getNext()
n.setNext(y)
y.setNext(x)
x.setNext(v)
----------------------
Algorithm swap(x, y):
Node n <-- head
while( n.next != x ) do
n <-- n.next
Node v <-- y.next
n.setNext(y)
y.setNext(x)
x.setNext(v)
也许您的意思是直接访问字段next
和使用访问器方法getNext()
间接访问字段之间的区别是什么,是吗?
从理论上讲,直接通过名称访问更有效,因为这是访问对象中数据的最直接方式。但是它违反了封装,因为类的字段应该隐藏实现细节。您也不能分离读/写访问,因为访问修饰符不够细粒度。
使用附件方法访问是很好的封装。它允许您随意修改实现细节,例如将下一个节点存储在文件而不是内存中,而不会影响类的用户。您还可以扩展类,并使用特定目的的内容覆盖逻辑。
由于封装在面向对象编程中非常重要,因此强烈不鼓励直接访问字段,而使用访问方法是首选方法。