java的集合
ArrayList
attaylist是java封装的集合框架,底层还是用弹性大小数组来实现的。 transient Object[] elementData;
需要注意的是remove方法
public E remove(int index) { rangeCheck(index); modCount++; E oldValue = elementData(index); int numMoved = size - index - 1; //需要移动的元素 大小 if (numMoved > 0) System.arraycopy(elementData, index+1, elementData, index, numMoved); elementData[--size] = null; // clear to let GC do its work return oldValue; }
在删除元素的时候,arrayList会把内部的数组进行移动,所以在删除的时候,从数组的后面进行删除。
在jdk8提供了fastRemove()方法,知识没有了rangecheck和返回olvValue。
这个list主要用了System.arraycopy 方法。
LinkedList
是怎么进行查找??
Node<E> node(int index) { // assert isElementIndex(index); if (index < (size >> 1)) { Node<E> x = first; for (int i = 0; i < index; i++) x = x.next; return x; } else { Node<E> x = last; for (int i = size - 1; i > index; i--) x = x.prev; return x; } }
发现是从中间开始,然后一个一个进行线性查找。
hashMap
hash算法如下
static final int hash(Object key) { int h; return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16); }