Java 从同一pojo数组创建两个列表,修改一个列表,同样的事情也会影响另一个列表
我从同一pojo创建了两个List对象,并对其中一个进行了排序。当我试图更改一个列表时,其他列表也得到了更新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
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());如果我在筛选器列表中保存值,它也会影响子筛选器列表如何填充这些列表,发布完整的代码如果您可以发布一些代码就太好了,在我看来,假设您的两个列表使用相同的对象引用