Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 排序和复制对象是最好的方法吗?_Java_Arraylist - Fatal编程技术网

Java 排序和复制对象是最好的方法吗?

Java 排序和复制对象是最好的方法吗?,java,arraylist,Java,Arraylist,我决定做服务器端排序。我有一个带有对象的HashMap(key是字符串,value是ItemDTO)。这些在服务器启动时静态加载 对于每个具有一定数量项(在本例中为ItemOnCharacterDTO)的字符(CharacterDTO),我需要能够对内容进行排序。因此,我的客户机发送了一个对对象进行排序的请求以及一些过滤数据。我现在想做的是: 根据ItemOnCharacterDTOs中保存的ID获取完整的ItemDTOs 将这些项添加到列表中 对列表中的ItemDTOs进行排序(可能使用比较器

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

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

  • 根据ItemOnCharacterDTOs中保存的ID获取完整的ItemDTOs
  • 将这些项添加到列表中
  • 对列表中的ItemDTOs进行排序(可能使用比较器)
  • 创建一个ID数组(它对应于排序后ItemdTo列表的顺序)
  • 放弃我以前创建的ItemdTo列表,因为我已经在排序后获得了正确的顺序
  • 我现在的问题是:我是否需要在将ItemdTo添加到列表之前复制它们,以便不干扰同时进行的多个排序?

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


    提前感谢您的帮助

    如果单个对象是可变的,即它们可能会以影响排序顺序或筛选的方式更改,则只需复制它们。在Java中,对象数组实际上是堆上对象的引用数组,因此在数组中移动引用对底层对象没有影响。

    如果itemdto是不可变的,则无需复制它们。如果不是,那要看情况。你能和我分享一些代码吗?我觉得你考虑得太多了。ArrayList是对对象的T个引用。你在操作这些参考资料吗?如果你是,那么你可能想要一份。如果你只是在找订单,你很好。此外,如果您要访问服务器(并从服务器访问),您可能正在序列化对象,这相当于每次传输对象时的深度克隆。这一点可能没有意义。是的,ItemDTO和ItemOnCharacterDTO都是可序列化的。我也确信我不会更改ItemDTOs。但是:我可能会使用某种比较器(或比较接口),以便能够创建过滤设置指定的顺序(例如,按名称、类型、价格、所有者ID排序)。我不确定,但我认为大脑回答了我的问题:在数组中移动引用不会影响底层对象——这可能是我真正想知道的。我现在认为这个回答是正确的。非常感谢大家!你好我想这就是我想知道的。我不确定比较对象并在数组中移动它们是否意味着改变实际对象。