java对象的浅表副本

时间:2018-10-03 18:24:45

标签: java shallow-copy

我正在尝试创建一个类,它将是一种数据库。 这是代码:

public class DataFrame {

public HashMap<String, ArrayList<?>> data;
public String[] nazwy;
public String[] typy;

public DataFrame(String[] _nazwy, String[] _typy) {

    data = new HashMap<String, ArrayList<?>>();
    nazwy = new String[_nazwy.length];
    typy = new String[_typy.length];

    for(int i = 0; i < _nazwy.length; i++) {
        nazwy[i] = _nazwy[i];
        typy[i] = _typy[i];
        ArrayList<?> kolumna = new ArrayList<>();
        data.put(_nazwy[i], kolumna);
    }
}

public int size() {
    return data.size();
}

public ArrayList get(String kolname) {
    return data.get(kolname);
}

public DataFrame get(String [] kols, boolean copy) { // shallow and deep
    int size = kols.length;
    String[] _typy = new String[size]; // naprawic typy
    int i = 0;
    int j = 0;
    for(String kol : kols) {
        if(kol == typy[i]) {
            _typy[j] += typy[i];
            j++;
        }
        i++;
    }
    if(copy) {
        DataFrame temp = new DataFrame(kols, _typy);
        for(String kol : kols) {
            if(data.containsKey(kol))
                temp.data.put(kol, data.get(kol));
        }
        return temp;
    }
    else {
        DataFrame temp = new DataFrame(kols, _typy);
        for(String kol : kols) {
            if(data.containsKey(kol))

                temp.data.clone();
        }
        return temp;
    }
}

}

我创建了构造函数,size()和get(column)。运行正常(我已经对其进行了测试)。我还尝试制作一个深层副本,但我认为它可以工作,但是我不知道如何制作仅列出各列的浅层副本。我找到了clone()方法,但它不起作用:(

public DataFrame get(String [] kols, boolean copy) { // shallow and deep
    int size = kols.length;
    String[] _typy = new String[size]; // naprawic typy
    int i = 0;
    int j = 0;
    for(String kol : kols) {
        if(kol == typy[i]) {
            _typy[j] += typy[i];
            j++;
        }
        i++;
    }
    if(copy) {
        DataFrame temp = new DataFrame(kols, _typy);
        for(String kol : kols) {
            temp.data.put(kol, data.get(kol));
        }
        return temp;
    }
    else {
        DataFrame temp = new DataFrame(kols, _typy);
        temp.data = data;
        Set<String> set = new HashSet<String>();
        for(int k=0; k<kols.length; ++k)
            set.add(kols[k]);
        temp.data.keySet().retainAll(set);
        return temp;
    }
}

我是这样的。即时通讯检查对象时,在抄浅中返回false,在进行深部检查时返回true

0 个答案:

没有答案