gpt4 book ai didi

java - Java Set对象可以就地修改吗?

转载 作者:行者123 更新时间:2023-11-30 03:31:03 25 4
gpt4 key购买 nike

我正在使用 TreeSet,但我更具体地想知道 Set 是否可以修改条目而不删除它,或者这是否会产生不可预测的行为。基本上,如果 Set/TreeSet 被修改,即使修改的条目没有被删除并重新添加,它是否会在内部重新组织自身?

最佳答案

通常,具有某种内部结构的集合不会监视其元素的更改,如果您修改元素(以更改结构所基于的属性的方式),它们的结构将被破坏。这也适用于TreeSet。但是,如果正确实现其元素的 hashCode() 方法,HashSet 将处理更改,因为该方法的约定指定对象的哈希码永远不会更改。 (从技术上讲,ComparatorComparable 也应该具有以下属性:compare(a, b)(或 a对于相同的两个元素,.compareTo(b)) 应该始终相同,如果您的元素或 Comparator 满足这一点,TreeMap 也是安全的。 )

简而言之:如果将元素放入结构化集合中,请确保所做的更改不会影响该集合结构所基于的属性/行为。这是哪个属性/行为取决于结构。

但是,您可以使用观察者模式自己实现这种行为:您的元素可以是可观察的,并且您可以为您的集合编写一个包装类来监听其元素的更改。每当元素发生更改时,您都会将其删除,然后将其重新插入。很可能,您需要两个通知:一个在更改之前(删除),一个在更改之后(添加)。

关于java - Java Set对象可以就地修改吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29024488/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com