码迷,mamicode.com
首页 > 其他好文 > 详细

集合类 collection接口 ArrayList

时间:2018-01-01 22:03:22      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:tree   xtend   int   set   img   分享图片   iter   +=   方法   

数组: 存储同一种数据类型的集合容器.
数组的特点:
1. 只能存储同一种数据类型的数据。
2. 一旦初始化,长度固定。 
3. 数组中的元素与元素之间的内存地址是连续的。
  : Object类型的数组可以存储任意类型的数据。


集合:集合是存储对象数据的集合容器。
集合比数组的优势:
1. 集合可以存储任意类型的对象数据,数组只能存储同一种数据类型 的数据。
2. 集合的长度是会发生变化的,数组的长度是固定的。

Collection接口提供的方法:

技术分享图片

提供的实现类继承关系如下:

------------| Collection 单例集合的根接口
----------------| List  如果是实现了List接口的集合类,具备的特点: 有序,可重复。 
-------------------| ArrayList  ArrayList 底层是维护了一个Object数组实现的。 特点: 查询速度快,增删慢。
-------------------| LinkedList LinkedList 底层是使用了链表数据结构实现的, 特点: 查询速度慢,增删快。
-------------------| Vector(了解即可)  底层也是维护了一个Object的数组实现的,实现与ArrayList是一样的,但是Vector是线程安全的,操作效率低。


----------------| Set  如果是实现了Set接口的集合类,具备的特点: 无序,不可重复。
-------------------| HashSet  底层是使用了哈希表来支持的,特点: 存取速度快. 
-------------------| TreeSet   如果元素具备自然顺序 的特性,那么就按照元素自然顺序的特性进行排序存储。

ArrayList  

ArrayList  继承关系如下:

技术分享图片

RandomAccess为标记接口,表明for循环比Iterator迭代器循环具有更高的性能
List接口新增方法为:
  • boolean addAll(int index, Collection<? extends E> c);
  • E get(int index);
  • E set(int index, E element);
  • void add(int index, E element);
  • E remove(int index);
  • int indexOf(Object o);
  • int lastIndexOf(Object o);
  • ListIterator<E> listIterator();
  • ListIterator<E> listIterator(int index);
  • List<E> subList(int fromIndex, int toIndex);

新增接口主要和List有关的随机访问有关系

ArrayList底层实现为Object数组,这也是泛型在数组上的缺陷,只能维护一个Object类型的数组。

扩容:首次初始化数组length为10,通常为1.5倍扩容,

      elementData = Arrays.copyOf(elementData, newCapacity);完成扩容和数组内容复制

会有系统调用的add操作:

    public void add(int index, E element) {
        rangeCheckForAdd(index);

        ensureCapacityInternal(size + 1);  // Increments modCount!!
        System.arraycopy(elementData, index, elementData, index + 1,
                         size - index);
        elementData[index] = element;
        size++;
    }

    public boolean addAll(int index, Collection<? extends E> c) {
        rangeCheckForAdd(index);

        Object[] a = c.toArray();
        int numNew = a.length;
        ensureCapacityInternal(size + numNew);  // Increments modCount

        int numMoved = size - index;
        if (numMoved > 0)
            System.arraycopy(elementData, index, elementData, index + numNew,
                             numMoved);

        System.arraycopy(a, 0, elementData, index, numNew);
        size += numNew;
        return numNew != 0;
    }

    public Object[] toArray() {
        return Arrays.copyOf(elementData, size);
        
    }    

所有Collection具有公共的父接口Iterable,Iterable接口提供如下三个方法:

技术分享图片

其中iterator()方法返回一个Iterator类型的对象,Iterator包含两个方法,支持快速失败

技术分享图片

 

集合类 collection接口 ArrayList

标签:tree   xtend   int   set   img   分享图片   iter   +=   方法   

原文地址:https://www.cnblogs.com/heapStark/p/8168728.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!