繁体   English   中英

Java:通过修改作为参数传递的对象来使数据结构无效

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM