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);
    }

 

 

posted @ 2014-04-04 14:19  新密牛哥哥  阅读(140)  评论(0编辑  收藏  举报