2008-10-30 08:31 |
@stanleyxu2005
关于部分,你可以看一下Jdk中链表的实现。LinkedHashSet实现是通过LinkedHashMap来实现
void addEntry(int hash, K key, V value, int bucketIndex) {
createEntry(hash, key, value, bucketIndex);
// Remove eldest entry if instructed, else grow capacity if appropriate
Entry<K,V> eldest = header.after;
if (removeEldestEntry(eldest)) {
removeEntryForKey(eldest.key);
} else {
if (size >= threshold)
resize(2 * table.length); //重新申请内存空间,大小为原来的两倍,并把原来的数据内容复制
}
}
虽然注释上说是实现了双向链表,但其最终还是以数组的方式存储。只是在实现中体表了链表这样特性功能(快速新增,删除)。
下面是它的删除操作,其实并没有把实际的值删除,而是引用不到这块内容而以(在数据组中还存在,在下次重新申请空间时,这块才会被清除掉)
private void remove() {
before.after = after;
after.before = before;
}
回复 更多评论