只获得arraylist的最后一个元素并丢失旧元素

时间:2011-10-13 16:10:04

标签: java

我有关于Arraylists的问题。我创建了一个用户定义对象的arraylist。在我的绘图程序中,我创建了一个只接受这个arraylist的类。在另一个类中,我创建了这个对象,然后我创建了另一个带有这些对象的arraylist。如果您可以查找我的代码,您可以更好地理解。问题是我必须在添加到最后一个arraylist后删除对象的arraylist的所有元素。但是我总是在删除后失去元素。我使用了clone()方法,然后我总是保留最后的元素。我知道它复制在这里,抱歉我的英语,如果你能查看我的代码,你可以清楚地理解我的意思。

 public class Lines {

public int id;
public Point point1;
public Point point2;
public int[] denklem;
}

public class Devline {
ArrayList<Lines> segmentim = new ArrayList<Lines>();

 }
...
Devline devarray = new Devline();
Devline devarray3 = new Devline();
ArrayList<Devline> devarray2 = new ArrayList<Devline>();

if(SwingUtilities.isRightMouseButton(e) == true){
        devarray3.segmentim =  (ArrayList<Lines>) devarray.segmentim.clone();
        devarray2.add(devarray3);
        devarray = new Devline();
        begin = true;

    }

这是我如何向devarray添加元素。

  devarray.segmentim.add(l1);

我需要将所有元素添加到我的devarray2列表中。每次我点击右键都会将devarray元素添加到devarray2中,所以我可以在devarray2中创建许多不同的devarray元素。谢谢。

2 个答案:

答案 0 :(得分:0)

devarray3.segmentim =  (ArrayList<Lines>) devarray.segmentim.clone();
devarray2.add(devarray3);

您正在重复向Devline添加相同的ArrayList对象。它的segmentim正在发生变化,因为它正在影响ArrayList中的所有元素。

您需要在每次迭代中向Devline添加 devaray2 ArrayList。由于您正在创建新的devarray,因此您可以自己使用它:

devarray2.add(devarray);
devarray = new Devline();
begin = true;

此外,您应该更改名称 - devarray不是数组,应该是devLine,应该调用Lines类<{1}}

答案 1 :(得分:0)

你能试试吗

module.exports = function (socket) {
    var sockets = this;
    console.log('user connected');

    socket.on('myEvent', function(data) {
        sockets.emit('hello_all_clients',data);
    });
}

复制devarray2 arraylist?