Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.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 从同一pojo数组创建两个列表,修改一个列表,同样的事情也会影响另一个列表_Java_Android_Arrays - Fatal编程技术网

Java 从同一pojo数组创建两个列表,修改一个列表,同样的事情也会影响另一个列表

Java 从同一pojo数组创建两个列表,修改一个列表,同样的事情也会影响另一个列表,java,android,arrays,Java,Android,Arrays,我从同一pojo创建了两个List对象,并对其中一个进行了排序。当我试图更改一个列表时,其他列表也得到了更新 List<FilterPojo.Data> filterList = new ArrayList<>(); List<FilterPojo.Data> subFilterList = new ArrayList<>(); List<String> filterList = new ArrayList<St

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

List<FilterPojo.Data> filterList = new ArrayList<>();
List<FilterPojo.Data> subFilterList = new ArrayList<>();
        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);
List filterList=new ArrayList();
List subFilterList=new ArrayList();

如果我更改了
过滤器列表
中的值,那么
子过滤器列表

中也会发生相同的更改,因为您提供的信息有限,您似乎正在创建/填充
子过滤器列表
作为
过滤器列表
子列表。当您这样做时,在任一列表中所做的所有更改都将反映在其他列表中

        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);

之所以会出现这种情况,是因为
List.subList()
返回列表的视图,因此对原始列表的修改将反映在子列表中。正如其他人所建议的,不要使用
子列表
使用
addAll
来填充
子过滤器列表

,而是使用您提供的有限信息,似乎您正在创建/填充
子过滤器列表
,作为
过滤器列表
子列表
。当您这样做时,在任一列表中所做的所有更改都将反映在其他列表中

        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);

之所以会出现这种情况,是因为
List.subList()
返回列表的视图,因此对原始列表的修改将反映在子列表中。正如其他人所建议的,使用
addAll
代替
subList
来填充
subFilterList

,这可能是引用问题。当项目复制到其他列表时,如果执行以下操作,列表将保持其引用:

List<FilterPojo.Data> subFilterList = filterList;
        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);

这可能是参考问题。当项目复制到其他列表时,如果执行以下操作,列表将保持其引用:

List<FilterPojo.Data> subFilterList = filterList;
        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);

我不知道你问的是什么背景
您的列表包含相同的对象。例如,在本例中为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");
        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);
Person p1=新人();
List list1=新的ArrayList();
列表1.添加(p1);
List list2=新的ArrayList();
列表2.添加(p1);
p1.设置名称(“新名称”);

我不知道您所问的确切上下文
您的列表包含相同的对象。例如,在本例中为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");
        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);
Person p1=新人();
List list1=新的ArrayList();
列表1.添加(p1);
List list2=新的ArrayList();
列表2.添加(p1);
p1.设置名称(“新名称”);
试试下面的方法

        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);
List filterList=new ArrayList();
List subFilterList=new ArrayList();
过滤器列表。添加(“A”);
过滤器列表。添加(“B”);
过滤器列表。添加(“C”);
/*子过滤器列表=过滤器列表;//引用同一对象时,更改将反映在两个对象中
过滤器列表。添加(“C”);
System.out.println(过滤器列表);
System.out.println(子过滤器列表)*/
subFilterList.addAll(过滤器列表);
过滤器列表。添加(“C”);
System.out.println(过滤器列表);
System.out.println(子过滤器列表);
试试下面的方法

        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);
List filterList=new ArrayList();
List subFilterList=new ArrayList();
过滤器列表。添加(“A”);
过滤器列表。添加(“B”);
过滤器列表。添加(“C”);
/*子过滤器列表=过滤器列表;//引用同一对象时,更改将反映在两个对象中
过滤器列表。添加(“C”);
System.out.println(过滤器列表);
System.out.println(子过滤器列表)*/
subFilterList.addAll(过滤器列表);
过滤器列表。添加(“C”);
System.out.println(过滤器列表);
System.out.println(子过滤器列表);

请发布您如何进行这些更改的代码。filterList.get(position).setIsSelect(!filterList.get(position).getIsSelect());如果我在筛选器列表中保存了值,它也会影响子筛选器列表您是如何填充这些列表的,发布完整的代码如果您可以发布一些代码就太好了,在我看来,这似乎是假设,您的两个列表使用相同的对象引用。s两个列表使用相同的对象请发布您如何进行这些更改的代码。filterList.get(position).setIsSelect(!filterList.get(position).getIsSelect());如果我在筛选器列表中保存值,它也会影响子筛选器列表如何填充这些列表,发布完整的代码如果您可以发布一些代码就太好了,在我看来,假设您的两个列表使用相同的对象引用