我正在为用于交换链表中的节点的算法编写伪代码,但有一个简单的问题:.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()
间接访问字段之间有什么区别?
从名称上直接访问在理论上更为有效,因为这是访问对象中数据的最直接方法。但这违反了封装,因为类的字段应该是隐藏的实现细节。您也不能分开读/写访问,因为访问修饰符不够精细。
使用辅助方法进行访问是很好的封装。它使您可以随意处理实现细节,例如将下一个节点存储在文件中而不是存储在文件中,而不会影响该类的用户。您还可以扩展该类,并使用专用的逻辑覆盖该逻辑。
由于封装在面向对象的编程中非常重要,因此强烈建议不要直接访问字段,并且使用访问器方法是首选方法。