注意:这是一个令人不安的问题,可能是一个错误,虽然我可能不正确并且遗漏了一些小东西
问题:
问题是单独实例化的对象指的是相同的数据结构。
调用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