我决定进行服务器端排序。我有一个带有对象的HashMap(键是一个字符串,值是一个ItemDTO)。这些是在服务器启动时静态加载的。

对于每个具有一定数量项的字符(CharacterDTO)(在本例中为ItemOnCharacterDTO),我需要能够对内容进行排序。因此,我的客户发送了一个对对象以及一些过滤数据进行排序的请求。我现在想做的是:


根据ItemOnCharacterDTO中保存的ID获取完整的ItemDTO
将这些ItemDTO添加到列表中
对列表中的ItemDTO进行排序(可能使用比较器)
创建一个ID数组(它对应于排序后的ItemDTO列表的顺序)
丢弃之前创建的ItemDTO列表,因为在排序后我得到了正确的顺序


我的问题现在是:我是否需要在将ItemDTO添加到列表之前复制它们,以免干扰同时进行的几种排序?

我确实在新创建的ItemDTO列表中更改了ItemDTO的顺序(上面的步骤2),但我没有更改ItemDTO本身(因此它们是静态的,并且在我开头提到的HashMap中)。

提前谢谢你的帮助!

最佳答案

仅当单个对象是可变对象时才需要复制它们,即如果它们可能以影响排序顺序或过滤的方式进行更改。在Java中,对象数组实际上是对堆上对象的引用的数组,因此在数组中移动引用不会对基础对象产生影响。

09-04 19:20