[英]Java: Invalidate a data structure by modifying the object passed as an argument
我正在研究AVL树的Java通用实现(源代码位于https://github.com/diningphil/AvlTreeJava ),并且遇到了一个特定问题:如果我将insert方法传递给参数T key ,然后在插入后修改key的字段,数据结构已损坏。
如何避免这种情况? 我是否可以传递一个对象,该对象要求用户以后不能通过我的avl树对其进行修改?
提前致谢
您可以在插入时克隆密钥。 这样,对原始对象所做的任何更改都不会对插入的对象生效。
除非数据是不可变的,否则我不知道如何完全避免它,但是您可以采取一些措施来分离数据。 我的意思是:可以用传入的Comparator来设置树,而不是T extends Comparable<T>
。
然后,客户端可以在插入后修改数据,而不会破坏树,只要它仅修改比较器中未使用的字段即可。 这迫使客户考虑自己想要和不想修改的内容,并提供了一点灵活性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.