【问题标题】:Created two Lists from same pojo array, Modifying one List, same thing affects on other list also从同一个 pojo 数组创建两个列表,修改一个列表,同样的事情也会影响另一个列表
【发布时间】:2018-08-10 19:36:37
【问题描述】:

我从同一个 pojo 创建了两个列表对象,并对其中一个进行了排序。当我尝试更改一个列表时,其他列表也得到了更新。

List<FilterPojo.Data> filterList = new ArrayList<>();
List<FilterPojo.Data> subFilterList = new ArrayList<>();

如果我更改filterList 中的值,subFilterList 中也会发生同样的变化

【问题讨论】:

  • 请发布您如何进行这些更改的代码。
  • filterList.get(position).setIsSelect(!filterList.get(position).getIsSelect());如果我取消过滤器列表中的值,它也会影响 subFilterList
  • 你如何填充这些列表,发布完整代码
  • 如果您可以发布一些代码,那就太好了,在我看来,假设您的两个列表都使用相同的对象引用。
  • 两个列表使用同一个对象

标签: java android arrays


【解决方案1】:

由于您提供的信息有限,您似乎正在创建/填充subFilterList 作为subListfilterList。当您这样做时,在任一列表中所做的所有更改都将反映在另一个列表中。

这是因为List.subList() 返回列表的视图,因此对原始列表的修改将反映在子列表中。正如其他人所建议的那样,使用 addAll 而不是 subList 填充 subFilterList

【讨论】:

    【解决方案2】:

    这可能是参考问题。如果您执行以下操作,则列表会在将项目复制到其他列表时维护其引用:

    List<FilterPojo.Data> subFilterList = filterList;
    

    改用addAll方法,

    subFilterList.clear();
    subFilterList.addAll(filterList);
    

    【讨论】:

      【解决方案3】:

      下面试试

              List<String> filterList = new ArrayList<String>();
              List<String> subFilterList = new ArrayList<String>();
      
              filterList.add("A");
              filterList.add("B");
              filterList.add("C");
      
              /*subFilterList = filterList; // reference to same object , change will reflect in both
              filterList.add("C");
              System.out.println(filterList);
              System.out.println(subFilterList);*/
      
              subFilterList.addAll(filterList);   
              filterList.add("C");
              System.out.println(filterList);
              System.out.println(subFilterList);
      

      【讨论】:

        【解决方案4】:

        我不确切知道您要问的上下文。
        您的列表包含相同的对象。例如,在这种情况下 p1。

        Person p1 = new Person();
        List<Person> list1 = new ArrayList<Person>();
        list1.add(p1);
        List<Person> list2 = new ArrayList<Person>();
        list2.add(p1);
        p1.setName("new name");
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-06-20
          • 2020-06-02
          • 2014-06-29
          • 1970-01-01
          • 2017-08-20
          • 2020-04-20
          相关资源
          最近更新 更多