Java 正在将ArrayList元素组收集到另一个ArrayList中
我用s点表示建筑物的坐标。 我把它们放入一个名为房屋列表的数组列表中Java 正在将ArrayList元素组收集到另一个ArrayList中,java,arraylist,point,Java,Arraylist,Point,我用s点表示建筑物的坐标。 我把它们放入一个名为房屋列表的数组列表中 ArrayList<Point> houseList = new ArrayList<Point>(); ArrayList houseList=new ArrayList(); 当所有房屋都在房屋列表中时,我将房屋列表添加到城市列表中,该列表也是一个阵列列表 ArrayList<ArrayList<Point>> cityList = new ArrayList<Ar
ArrayList<Point> houseList = new ArrayList<Point>();
ArrayList houseList=new ArrayList();
当所有房屋都在房屋列表中时,我将房屋列表添加到城市列表中,该列表也是一个阵列列表
ArrayList<ArrayList<Point>> cityList = new ArrayList<ArrayList<Point>>();
.
.
.
cityList.add(houseList);
houseList.clear();
ArrayList cityList=new ArrayList();
.
.
.
添加城市列表(房屋列表);
houseList.clear();
有更多的城市要添加到这个城市列表中,所以我清除了房屋列表,这样我可以用另一个城市的建筑再次填充它
但正如我所看到的,当我清除房屋列表时,它也会从城市列表中删除元素
从具有点坐标的建筑物收集城市的正确方法是什么?添加时,应克隆房屋的阵列列表,如下所示:
cityList.add(houseList.clone())
这样,将创建一个新副本并传递给city=,而不是添加时清除的对ArrayList的引用,您应该克隆房屋的ArrayList,如下所示:
cityList.add(houseList.clone())
这样,将创建一个新副本并传递给city=,而不是对ArrayList的引用,您可以清除该引用,但不要使用clear()
并重新使用该对象。将对象添加到列表中时,添加到列表中的不是对象的副本,而是引用
因此,清除将导致仍然指向同一对象的引用显示清除的对象。任何新内容都将反映在该参考中
正确的方法是将新列表分配给变量houseList
。然后它将是一个不同的对象,旧引用将查看不再改变的旧对象
cityList.add(houseList);
houseList = new ArrayList<ArrayList<Point>>();
cityList.add(房屋列表);
houseList=newarraylist();
不要使用清除()
并重新使用该对象。将对象添加到列表中时,添加到列表中的不是对象的副本,而是引用
因此,清除将导致仍然指向同一对象的引用显示清除的对象。任何新内容都将反映在该参考中
正确的方法是将新列表分配给变量houseList
。然后它将是一个不同的对象,旧引用将查看不再改变的旧对象
cityList.add(houseList);
houseList = new ArrayList<ArrayList<Point>>();
cityList.add(房屋列表);
houseList=newarraylist();
当你将房屋列表
放入城市列表
时,它不会复制-你实际上还没有将它放入城市列表
,你只是在那里放了一个对它的引用
您一次又一次地使用同一个列表,因此当您清除它时,您的所有点都将被删除
解决这一问题的最简单方法是为每个
房屋列表创建一个新的空阵列列表
,然后依次将每个列表添加到您的城市列表
当您将房屋列表
放入城市列表
时,它不会复制—您实际上没有将其放入城市列表
,你刚才在里面提到了它
您一次又一次地使用同一个列表,因此当您清除它时,您的所有点都将被删除
解决此问题的最简单方法是为每个房屋列表
创建一个新的空数组列表
,然后依次将每个列表添加到您的城市列表
如果你把桶装满水。然后把桶放进盒子里。然后清空桶中的牛奶,盒子里会装一桶牛奶
你需要两个不同的桶:一个装水,一个装牛奶。因此,你不需要清空第一个桶,你需要让它保持原样,而是拿一个新的,装满牛奶
cityList.add(houseList); // add the water bucket to the box
houseList = new ArrayList<>(); // get a new bucket
houseList.add(otherHouse); // add milk to the new bucket
cityList.add(houseList); // add the milk bucket to the box
cityList.add(房屋列表);//把水桶加到箱子里
houseList=new ArrayList();//买个新桶
房屋列表。添加(其他房屋);//把牛奶加到新桶里
城市列表。添加(房屋列表);//把牛奶桶加到盒子里
Java对象的工作原理与真实对象非常相似
如果你把桶装满水。然后把桶放进盒子里。然后清空桶中的牛奶,盒子里会装一桶牛奶
你需要两个不同的桶:一个装水,一个装牛奶。因此,你不需要清空第一个桶,你需要让它保持原样,而是拿一个新的,装满牛奶
cityList.add(houseList); // add the water bucket to the box
houseList = new ArrayList<>(); // get a new bucket
houseList.add(otherHouse); // add milk to the new bucket
cityList.add(houseList); // add the milk bucket to the box
cityList.add(房屋列表);//把水桶加到箱子里
houseList=new ArrayList();//买个新桶
房屋列表。添加(其他房屋);//把牛奶加到新桶里
城市列表。添加(房屋列表);//把牛奶桶加到盒子里
强烈反对使用克隆()
。与其克隆并清除它,为什么不创建一个新的ArrayList?强烈反对使用克隆()
。与其克隆并清除它,为什么不创建一个新的ArrayList?