其实重写不难,下面是我重写时定义的一些接口。
/**

 * 重写实现一个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()时,需要调用耗时的依赖方法。

重写一下ArrayList的更多相关文章

  1. 从Python学习中得到的一点启发 - Java逆向索引ArrayList

    看了几天Python,感觉记忆力不行了,很多东西记不住了.但是终归是得到了一点知识:重写一个ArrayList,允许从负值的索引得到指定的项.然后写一个得到斐波拉契数组的方法,这种方法要比递归调用的方 ...

  2. Java之集合(三)ArrayList

    转载请注明源出处:http://www.cnblogs.com/lighten/p/7291339.html 1.前言 本章介绍List中最常用的一个类--ArrayList.在第一章中已经介绍了Li ...

  3. java 集合之Arraylist的遍历及排序

    最近培训是先学习java基础 从最基本的开始学起 因为今天刚刚开博客 要把上周的一些重点内容归纳一下 1.Arraylist常用遍历以及排序 import java.util.ArrayList; i ...

  4. Java集合容器简介

    Java集合容器主要有以下几类: 1,内置容器:数组 2,list容器:Vetor,Stack,ArrayList,LinkedList, CopyOnWriteArrayList(1.5),Attr ...

  5. 201521123098 《Java程序设计》 第5周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 1.2 可选:使用常规方法总结其他上课内容. 1. 对接口这一定义有了初步的了解: 2. 学习了如何定义实现类和如何实现一些接 ...

  6. Java编程手冊-Collection框架(上)

    该文章所讲内容基本涵盖了Collection里面的全部东西,尽管基于jdk 1.5的.可是思路非常清晰 1.引言 1.1 Collection框架的介绍 尽管我们能够使用数组去存储具有同样类型的元素集 ...

  7. [转载]Java集合容器简介

    Java集合容器主要有以下几类: 1,内置容器:数组 2,list容器:Vetor,Stack,ArrayList,LinkedList, CopyOnWriteArrayList(1.5),Attr ...

  8. 2020面试整理【java】

    spring面试题 1.你对spring的理解 Spring 是个Java企业级应用的开源开发框架. Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用. Sprin ...

  9. 表的顺序结构---重写Arraylist类

    重写ArrayList类,为防止冲突,重写为MyArrayList,未继承Iterable类. public class MyArrayList<AnyType>{ int N=10; A ...

随机推荐

  1. Ng-Matero 0.1 发布了!

    Ng-Matero 0.1 终于发布了!周末折腾了两天,结果最后发版还是出了点意外,好在今天补了一版. 距离 Ng-Matero 发布第一版已经过去了一个多月,然后很颓废地休息了半个多月,最近项目的关 ...

  2. Flink集群Standalone启动脚本(源码分析)

    整个Flink集群的角色分为Jobmanager和TaskManager 以Standalone为例来看一下脚本里面是怎样启动集群的 找到源码的dist这里面包含了启动的脚本文件 standalone ...

  3. Selenium3 + Python3自动化测试系列九——cookie操作

    cookie操作 一.Cookie操作 WebDriver提供了操作Cookie的相关方法,可以读取.添加和删除cookie信息. 使用方法: 1:get_cookies() ,获取cookie信息 ...

  4. PHP CURL根据详细地址获取腾讯地图经纬度

    <?php $address = "广东省广州市天河区"; $point = getPoint($address); var_dump($point);//输出经纬度 /** ...

  5. 【原创】Linux cpu hotplug

    背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本: ...

  6. SyntaxError: invalid syntax : if not 0 <= time_low < 1<<32L:

    报错 Traceback (most recent call last): File "D:/PyCharm 5.0.3/WorkSpace/2.NLP/8.高阶实践/1.PipelineQ ...

  7. 【CF1137C】 Museums Tour 拆点+缩点

    https://codeforc.es/contest/1137/problem/C # 题意 给你n个点,每个点有k天博物馆开放时间的安排表. 有m条单向道路,走过一条边需要一个晚上,经过后就是第二 ...

  8. Joyful HDU - 5245 概率问题

    Sakura has a very magical tool to paint walls. One day, kAc asked Sakura to paint a wall that looks ...

  9. 牛客小白月赛6 水题 求n!在m进制下末尾0的个数 数论

    链接:https://www.nowcoder.com/acm/contest/135/C来源:牛客网 题目描述 其中,f(1)=1;f(2)=1;Z皇后的方案数:即在Z×Z的棋盘上放置Z个皇后,使其 ...

  10. poj 2115 求线性同余方程 C Looooops(好理解欧几里德扩展定理怎么应用)

    C Looooops Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 29061   Accepted: 8360 Descr ...