使用相同数据结构的单独/单独实例化对象

时间:2017-02-28 15:12:29

标签: java object intellij-idea data-structures

注意:这是一个令人不安的问题,可能是一个错误,虽然我可能不正确并且遗漏了一些小东西

问题:

问题是单独实例化的对象指的是相同的数据结构。

调用a.add()会将对象添加到data[NEXT],其中实例化为NEXT = 0,然后NEXT++以增加目的。

此后,调用b.add(),并按照add()方法的逻辑,扩展数组,

但是没有将初始值插入b,即b.data[0] = null

TL; DR

a.add()a增加了价值。 b.add()扩展了a的数组。这不应该发生,因为a和b是2个相同类型的独立对象

主类代码:

//...

SimpleSet<Integer> a = new SimpleSet<>();
SimpleSet<Integer> b = new SimpleSet<>();
// add a maximum of 20 unique random numbers from 0..99
Random rand = new Random();
for (int i = 0; i < 20; i++) {
    a.add(rand.nextInt(100));              //i=0 - adds to data[0] with no issue
    b.add(rand.nextInt(100));              //i=0 - extends a's array? why?
}

//...

class SimpleSet

public class SimpleSet<E> {

    private static int MIN_SIZE = 1;
    private static int NEXT = 0;
    private Object[] data;

    /**
     * constructor of SimpleSet
     */
    public SimpleSet() {
        data = new Object[MIN_SIZE];
    }

    public void add(E e) {
        if(NEXT > 0.75*MIN_SIZE){
            extendArray();
        }
        if (data != null) {
            data[NEXT] = e;
            NEXT++;
        }
    }

    private void extendArray() {
        MIN_SIZE = MIN_SIZE*2;
        Object[] newData = new Object[MIN_SIZE];
        for (int i = 0; i < data.length; i++) {
            newData[i] = data[i];
        }
        data = newData;
        return;
    }

    //...
}

我错过了一些小东西或者这是一个错误吗? IDE = IntelliJ 2016.3

0 个答案:

没有答案