Sca_jie 2023-12-20 16:28 采纳率: 33.3%
浏览 4
已结题

java List<String>修改某一个元素的某个子元素,结果全部元素的那个子元素都被修改,如何解决

java List修改某一个元素的某个子元素,结果全部元素的那个子元素都被修改,如何解决

private List<ChatItem> userlist = new ArrayList<>(); // 这里的userlis在别的地方已经初始化过了
for(int i=0;i<3;i++) {
                Log.d(TAG, "群聊执行:" + i);

                String send_id = jsonArray.getJSONArray(1).getJSONObject(i).get("send_id").toString();
                String accept_id = jsonArray.getJSONArray(1).getJSONObject(i).get("accept_id").toString();
                String mess_id = jsonArray.getJSONArray(1).getJSONObject(i).get("mess_id").toString();
                String send_name = jsonArray.getJSONArray(1).getJSONObject(i).get("send_name").toString();
                String content = jsonArray.getJSONArray(1).getJSONObject(i).get("content").toString();
                String send_date = jsonArray.getJSONArray(1).getJSONObject(i).get("send_date").toString();
                String content_type = jsonArray.getJSONArray(1).getJSONObject(i).get("content_type").toString();
                String status = jsonArray.getJSONArray(1).getJSONObject(i).get("status").toString();
                String isread_id = jsonArray.getJSONArray(1).getJSONObject(i).get("isread_id").toString();

                ChatMessItem chatMessItem_group = new ChatMessItem(mess_id, send_id, accept_id, send_name, content, send_date, content_type, status, isread_id);

                for (int n=0;n<userlist.size();n++) {
                    // 判断是否是对应用户
                    if (userlist.get(n).getId().equals(accept_id)) {
                        Log.d(TAG, "[成功]用户" + userlist.get(n).getId() + "/该消息的比对接受群" + accept_id);

                        List<ChatMessItem> chatMessItemList_group = userlist.get(n).getChatMessItemList();
                        chatMessItemList_group.add(chatMessItem_group);
                        userlist.get(n).setChatMessItemList(chatMessItemList_group);

                        break;
                    } else {
                        Log.e(TAG, "[失败]用户" + userlist.get(n).getId() + "/该消息的比对接受群" + accept_id);
                    }
                }
            }

我通过userlist.get(n).set来修改一个元素的某个子元素,但结果全部元素的那个子元素都被修改,很无奈,求指导一二


  • 写回答

1条回答 默认 最新

  • 闲者何去 2023-12-20 16:34
    关注

    问题可能出现在这行:

    List<ChatMessItem> chatMessItemList_group = userlist.get(n).getChatMessItemList();
    chatMessItemList_group.add(chatMessItem_group);
    userlist.get(n).setChatMessItemList(chatMessItemList_group);
    

    在这里,你获取了 userlist 中索引为 n 的元素的 ChatMessItemList,然后向这个列表中添加了一个元素 chatMessItem_group。接着,你又将修改后的列表重新设置给了 userlist 中索引为 n 的元素的 ChatMessItemList。

    然而,由于 Java 中的对象是引用传递,这意味着当你修改了 chatMessItemList_group 时,实际上也修改了 userlist 中索引为 n 的元素的 ChatMessItemList。因此,这可能导致你看到的结果是每个用户的 ChatMessItemList 都包含了新添加的 chatMessItem_group。

    你可以尝试创建一个新的 ChatMessItemList,将新的元素添加到这个新列表中,然后再设置给 userlist 中对应的元素。

    List<ChatMessItem> chatMessItemList_group = new ArrayList<>(userlist.get(n).getChatMessItemList());
    chatMessItemList_group.add(chatMessItem_group);
    userlist.get(n).setChatMessItemList(chatMessItemList_group);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月28日
  • 已采纳回答 12月20日
  • 创建了问题 12月20日

悬赏问题

  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表