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

 * 重写实现一个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. 四、Ansible的Galaxy包管理器

    一.什么是Ansible Galaxy? Ansible Galaxy是Ansible的第三方插件管理和安装工具,其实就是包管理软件.作用类似于Ubuntu的apt,Centos的yum,Python ...

  2. Spring Context 你真的懂了吗

    今天介绍一下大家常见的一个单词 context 应该怎么去理解,正确的理解它有助于我们学习 spring 以及计算机系统中的其他知识. 1. context 是什么 我们经常在编程中见到 contex ...

  3. urllib爬虫模块

    网络爬虫也称为网络蜘蛛.网络机器人,抓取网络的数据.其实就是用Python程序模仿人点击浏览器并访问网站,而且模仿的越逼真越好.一般爬取数据的目的主要是用来做数据分析,或者公司项目做数据测试,公司业务 ...

  4. lightoj 1049 - One Way Roads(dfs)

    Time Limit: 0.5 second(s) Memory Limit: 32 MB Nowadays the one-way traffic is introduced all over th ...

  5. 牛客第七场 Sudoku Subrectangles

    链接:https://www.nowcoder.com/acm/contest/145/J来源:牛客网 You have a n * m grid of characters, where each ...

  6. Different Integers 牛客网暑期ACM多校训练营(第一场) J 离线+线状数组或者主席树

    Given a sequence of integers a1, a2, ..., an and q pairs of integers (l 1, r1), (l2, r2), ..., (lq, ...

  7. B. Tea Queue codeforces Round.37.div2 队列

    B. Tea Queue time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

  8. yzoj P2045 不老的传说 题解

    题意 类似于涂色问题,环形问题不多说,断环加倍即可,限制条件if判断就行. 解析 代码 #include<bits/stdc++.h> using namespace std; int n ...

  9. 基于注解的读取excel的工具包

    easyexcel-wraper easyexcel-wraper是什么? 一个方便读取excel内容,且可以使用注解进行内容验证的包装工具 easyexcel-wraper有哪些功能? 在easye ...

  10. Shell脚本分析服务器性能

    概述 我们原先在服务器上想分析性能指标,需要执行一系列的linux命令.对于linux命令不熟悉的人来说,比较困难 现在有一套集成的shell脚本,把常用的linux命令都包含在里面,一键式分析性能瓶 ...