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



我正在研究AVL树的Java通用实现(源代码位于https://github.com/diningphil/AvlTreeJava),我遇到了一个特定的问题:如果我向insert方法传递一个参数T键,然后在插入后修改key的字段,则数据结构已损坏。

我该如何避免这种情况?我是否可以传递一个对象,要求用户以后不能修改它,而是通过我的avl树的实现来修改它?

提前感谢

除非数据是不可变的,否则我不知道如何完全避免它,但你可以做一些事情来分离数据。我的意思是:可以用传入的Comparator来设置树,而不是T extends Comparable<T>

然后,客户端可以在插入后修改数据,而不会损坏树,前提是它只修改Comparator中未使用的字段。这迫使客户思考他想要什么和不想要修改什么,并提供了一点灵活性。

您可以在插入时克隆密钥。这样,对原始对象的任何更改都不会对插入的对象生效。

相关内容

最新更新