TIntArrayList的resetQuick()方法使用

TIntArrayList的resetQuick()方法使用注意事项!

目录

TIntArrayList的 clear() 和 resetQuick() 对比

public void clear() {
        this.clear(10);
    }

public void clear(int capacity) {
    this._data = new int[capacity];
    this._pos = 0;
}

clear方法每次回new一个长度为10的新数组,同时将下标重置。

 public void resetQuick() {
        this._pos = 0;
    } 

resetQuick()是一个快速清除方法,没有new新的数组。

有些场景可以使用resetQuick()方法而不是clear()方法,减少new对象。

可以看到resetQuick()只是把记录下标索引的值pos置为了0。

数组内的值并没有清除,还保留在内存当中。

使用resetQuick()注意事项

TIntArrayList的 add()方法

public boolean add(int val) {
        this.ensureCapacity(this._pos + 1);
        //对应索引赋值
        this._data[this._pos++] = val;
        return true;
    }

调用ensureCapacity确认数组容量

public void ensureCapacity(int capacity) {
        //如果当前索引大于存值数组的长度,扩容
        if (capacity > this._data.length) {
            //数组扩容一倍和当前索引比较,取大值
            int newCap = Math.max(this._data.length << 1, capacity);
            int[] tmp = new int[newCap];
            //将旧数组的值拷贝到临时数组tmp
            System.arraycopy(this._data, 0, tmp, 0, this._data.length);
            //改变引用
            this._data = tmp;
        }
    }

如果当前索引大于存值数组的长度进行数组扩容

this._data[this._pos++] = val;

添加是根据下标索引覆盖原先值, resetQuick()把pos下标清0,所以不会有问题。

TIntArrayList的 get()方法

public int get(int offset) {
        if (offset >= this._pos) {
            throw new ArrayIndexOutOfBoundsException(offset);
        } else {
            return this._data[offset];
        }
    }

get值时,会先判断是否大于下标索引值,大于等于抛异常,不会有问题。

TIntArrayList的迭代

int size = list.size();
for (int i = 0; i < size; i++)
{
    ...
}
 public int size() {
        return this._pos;
    }

size方法判断的是下标长度,所以不会有问题。

总结

其它几个操作就不一一看了,基本上都没有问题。

使用TIntArrayList的 resetQuick() 方法,最主要注意是数组内的值并没有清除,还保留在内存当中。

Search

    Table of Contents