zoukankan      html  css  js  c++  java
  • 数据结构与算法分析java——线性表2(ArrarList )

    ArrayList

    ArrayList 是一个数组队列,相当于 动态数组。与Java中的数组相比,它的容量能动态增长。它继承于AbstractList,实现了List, RandomAccess, Cloneable, java.io.Serializable这些接口。


    ArrayList 继承了AbstractList,实现了List。它是一个数组队列,提供了相关的添加、删除、修改、遍历等功能。


    ArrayList 实现了RandmoAccess接口,即提供了随机访问功能。RandmoAccess是java中用来被List实现,为List提供快速访问功能的。在ArrayList中,我们即可以通过元素的序号快速获取元素对象;这就是快速随机访问。稍后,我们会比较List的“快速随机访问”和“通过Iterator迭代器访问”的效率。


    ArrayList 实现了Cloneable接口,即覆盖了函数clone(),能被克隆。


    ArrayList 实现java.io.Serializable接口,这意味着ArrayList支持序列化,能通过序列化去传输。


    和Vector不同,ArrayList中的操作不是线程安全的。所以,建议在单线程中才使用ArrayList,而在多线程中可以选择Vector或者CopyOnWriteArrayList。

    1. 成员变量和初始化

    private static final int DEFAULT_CAPACITY = 10;
    private static final Object[] EMPTY_ELEMENTDATA = {};
    private transient Object[] elementData;
    private int size;

     默认的大小为10。

    EMPTY_ELEMENTDATA是用于无参初始化,即一个等于null的对象数组。

    elemenData则用于有参初始化的变量,也是我们下面操作的主体对象。

    下面看看有参初始化的源码:

    public ArrayList(int initialCapacity) {
        super();
        if (initialCapacity < 0)
            throw new IllegalArgumentException("Illegal Capacity: "+
                                                initialCapacity);
        this.elementData = new Object[initialCapacity];
    }

    此处初始化一个大小为initialCapacity的对象数组

    由初始化的过程可以看出:ArrayList是基于动态数组实现的

    2. 常用操作

    // Collection中定义的API
    boolean             add(E object)
    boolean             addAll(Collection<? extends E> collection)
    void                clear()
    boolean             contains(Object object)
    boolean             containsAll(Collection<?> collection)
    boolean             equals(Object object)
    int                 hashCode()
    boolean             isEmpty()
    Iterator<E>         iterator()
    boolean             remove(Object object)
    boolean             removeAll(Collection<?> collection)
    boolean             retainAll(Collection<?> collection)
    int                 size()
    <T> T[]             toArray(T[] array)
    Object[]            toArray()
    // AbstractCollection中定义的API void add(int location, E object) boolean addAll(int location, Collection<? extends E> collection) E get(int location) int indexOf(Object object) int lastIndexOf(Object object) ListIterator<E> listIterator(int location) ListIterator<E> listIterator() E remove(int location) E set(int location, E object) List<E> subList(int start, int end)
    // ArrayList新增的API Object clone() void ensureCapacity(int minimumCapacity) void trimToSize() void removeRange(int fromIndex, int toIndex)

    3. 遍历方式

    1)随机访问,通过索引获取元素。ArrayList实现了RandomAccess接口

    Integer value=null;
    int size=list.size();
    for(int i=0;i<size;i++){
        value=(Integer) list.get(i);
    }

    2)for循环

    Integer value=null;
    for(Integer integ:list){
        value=integ;
    }

    3)迭代器

    Integer value=null;
    Integer iter=list.iterator();
    while (iter.hasNext()) {
        value=(Integer) iter.next();
    }

    4. 例子

    import java.util.*;
    
    public class ArrayListTest {
        public static void main(String[] args) {
    
            // 创建ArrayList
            ArrayList list = new ArrayList();
            // 将“”
            list.add("1");
            list.add("2");
            list.add("3");
            list.add("4");
            // 将下面的元素添加到第1个位置
            list.add(0, "5");
            // 获取第1个元素
            System.out.println("the first element is: "+ list.get(0));
            // 删除“3”
            list.remove("3");
            // 获取ArrayList的大小
            System.out.println("Arraylist size=: "+ list.size());
            // 判断list中是否包含"3"
            System.out.println("ArrayList contains 3 is: "+ list.contains(3));
            // 设置第2个元素为10
            list.set(1, "10");
            // 通过Iterator遍历ArrayList
            for(Iterator iter = list.iterator(); iter.hasNext(); ) {
                System.out.println("next is: "+ iter.next());
            }
            // 将ArrayList转换为数组
            String[] arr = (String[])list.toArray(new String[0]);
            for (String str:arr)
                System.out.println("str: "+ str);
            // 清空ArrayList
            list.clear();
            // 判断ArrayList是否为空
            System.out.println("ArrayList is empty: "+ list.isEmpty());
        }
    }
  • 相关阅读:
    zt 必看: 原来PCIe技术原理这么简单!
    zt linux:centos 解决SSH连接Linux超时自动断开
    idea总结和未来的想法
    linux一些技巧
    zt如何解决Verilog目前不支持数组型端口定义!
    高速设计学习-干货!高速串行Serdes均衡之FFE
    zt:tcpdump抓包对性能的影响
    zt:TCP 学习
    verdi使用
    IE 浏览器下 button元素自动触发click?
  • 原文地址:https://www.cnblogs.com/zxqstrong/p/5417186.html
Copyright © 2011-2022 走看看