zoukankan      html  css  js  c++  java
  • 重写一下ArrayList

    其实重写不难,下面是我重写时定义的一些接口。
    /**
    
     * 重写实现一个list
    
     * @author <u>zhoujx</u>
    
     *
    
     */
    
    public interface MyList<E> {
    
    
    
           /**
    
            * 添加一个元素
    
            * @param element 元素
    
            */
    
           public void add(E element);
    
           
    
           /**
    
            * 添加一组元素
    
            * @param elements 一组元素
    
            */
    
           public void add(E[] elements);
    
           
    
           /**
    
            * 删除元素
    
            * @param element 需要删除的元素
    
            * @param allOccurence true就删除所有该元素,false则删除第一次出现的该元素
    
            * @return 元素存在返回true,不存在返回false
    
            */
    
           public boolean del(E element, boolean allOccurence);
    
           
    
           /**
    
            * 删除指定位置的元素
    
            * @param index 指定位置
    
            * @return 返回删除的元素
    
            */
    
           public E del(int index);
    
           
    
           /**
    
            * 删除指定位置的元素
    
            * @param index 指定位置
    
            * @return 返回删除的元素
    
            */
    
           public E del(E element);
    
           
    
           /**
    
            * 更换指定位置的元素
    
            * @param index 元素的位置也就是索引
    
            * @param element
    
            * @return 被更换的老元素
    
            */
    
           public E set(int index, E element);
    
           
    
           /**
    
            * 获取元素
    
            * @param index 元素位置(索引)
    
            * @return 元素
    
            */
    
           public E get(int index);
    
           
    
           /**
    
            * 查找元素首次出现的位置
    
            * @param element 需要查找的元素
    
            * @return 查找到则返回该元素位置,否则返回-1
    
            */
    
           public int indexOf(E element);
    
           
    
           /**
    
            * 使用指定位置获取当前容器的子容器
    
            * @param fromIndex 开始位置(包括)
    
            * @param toIndex 结束位置(不包括)
    
            * @return 子容器
    
            */
    
           public MyList<E> subList(int fromIndex, int toIndex);
    
           
    
           /**
    
            * 是否为空容器
    
            * @return 是返回true,不是返回false 
    
            */
    
           public boolean isEmpty();
    
           
    
           /**
    
            * 清空容器
    
            */
    
           public void clear();
    
           
    
           /**
    
            * 获取容器大小
    
            * @return 容器中元素的个数
    
            */
    
           public int size();
    
           
    
    }
    
    
    
    使用到的一些方法或者依赖

    我在删除使用到System的arraycopy()

    System.arraycopy(a, 0, elementData, size, numNew);的意思是将数组a中从下标0开始,到0+numNew=numNew之间的元素移动到elementData数组中,但存放的位置是在size之后的,这样说应该能懂这个方法是干什么的了,这个操作是比较花时间的,所以对于添加和删除操作比较的频繁的时候,LinkedList是要好于ArrayList的,所以平时不要一味的依赖ArrayList。

    扩容时使用了Arrays的copyOf()

    Arrays的copyOf()方法传回的数组是新的数组对象,所以您改变传回数组中的元素值,也不会影响原来的数组。copyOf()的第二个自变量指定要建立的新数组长度,如果新数组的长度超过原数组的长度,则保留数组默认值

    从源码能看出arraylist的好处和坏处,其实不难。

    好处就是在调用get()以及set()方法时,因为是基于数组的,有了数组的特性很快。

    但是在add()和del()时,需要调用耗时的依赖方法。

  • 相关阅读:
    根据企业信息化应用需求来分析工作流平台的选型
    如何把文件上传到另外一台服务器【转自 金色約定之家】
    如何启用sqlplus的AutoTrace功能 【转】
    使用AJAX技术构建更优秀的Web应用程序
    提高ORACLE数据库的查询统计速度
    一个弹出式menu的制作
    鼠标滑过div显示与隐藏
    使用ASP.NET Atlas AutoComplete Behavior或AutoComplete Extender实现自动完成功能(下)
    使用ASP.NET Atlas AutoComplete Behavior或AutoComplete Extender实现自动完成功能(上) 【转自http://dflying.cnblogs.com】
    用javascript来操作字符串
  • 原文地址:https://www.cnblogs.com/z-jx/p/10579353.html
Copyright © 2011-2022 走看看