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算法如下
1
2
3
4 |
static final int hash(Object key) { int
h; return
(key == null ) ? 0
: (h = key.hashCode()) ^ (h >>> 16 ); } |
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。