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

 * 重写实现一个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. Streaming-大数据的未来

    分享一篇关于实时流式计算的经典文章,这篇文章名为Streaming 101: The world beyond batch 那么流计算如何超越批处理呢? 从这几个方面说明:实时流计算系统,数据处理模式 ...

  2. 《MyCat分库分表策略详解》

    在我们的项目发展到一定阶段之后,随着数据量的增大,分库分表就变成了一件非常自然的事情.常见的分库分表方式有两种:客户端模式和服务器模式,这两种的典型代表有sharding-jdbc和MyCat.所谓的 ...

  3. c++json构建与解析组件 RapidJSON 没用过永远不会知道有多好用

    参考资料: 官方文档 推荐[腾讯RapidJSON]学习笔记 原理请参考以上资料 构建json Document doc; Document::AllocatorType &allocator ...

  4. 水果机抽奖(CocosCreator)

    推荐阅读:  我的CSDN  我的博客园  QQ群:704621321 一.前言       在前面给大家分享了大转盘的抽奖方式,这是现在游戏使用较多的一种抽奖方式,今天给大家介绍另一抽奖方式--水果 ...

  5. CSAPP - Ch 1 - 计算机系统漫游

    目录 0 序言及摘要 1 信息就是位+上下文 2 程序被其他程序翻译成不同的格式 3 了解编译系统如何工作是大有益处的 0 序言及摘要 (1) 序言: CS:APP -- Computer Syste ...

  6. 数据结构C线性表现实

    linearList.h #ifndef _INC_STDIO_8787 #define _INC_STDIO_8787 #include <stdio.h> #include <m ...

  7. java后台图片上传预检失败解决方案

    1.首先因为服务器端会先发送一个option请求到后台  在后台返回一个post给页面 页面在处理post请求给接口 2.先写一个过滤器, 我们自己定义一个过滤器 package com.adtime ...

  8. CF1198E Rectangle Painting 2(最小割 思维

    这个题主要是转化为最小割的思路不好想到. 大意:给你一个大的正方形,有的点黑,有的点白,要把黑染白,你每次可以选一个矩形染色,代价是min(长,宽),问最小代价. 思路:对于一个要染色的块来说,他要被 ...

  9. Codeforces Round #381 (Div. 2) C. Alyona and mex(无语)

    题目链接 http://codeforces.com/contest/740/problem/C 题意:有一串数字,给你m个区间求每一个区间内不含有的最小的数,输出全部中最小的那个尽量使得这个最小值最 ...

  10. Java服务器-Disruptor使用注意

    最近看了一下部署游戏后台的服务器状况,发现我的一个Java程序其占用的CPU时长超过100%,排查后发现竟是Disruptor引起的,让我们来看看究竟为什么Disruptor会有这样的表现. 发现占用 ...