对于ArrayList相比大家都很熟悉,它是java中最常用的集合之一。下面就给出它的自我实现的java代码。

需要说明的一点是,它是基于数组创建的。所以它在内存中是顺序存储,对于查找十分的方便。

package com.pinjia.shop.common.collection;

import java.util.Iterator;
import java.util.NoSuchElementException; /**
* Created by wangwei on 2017/1/3.
* ArrayList的自己封装,实现
*/
public class MyArrayList<E> implements Iterable<E> { private static final int DEFAULT_SIZE = 10;//容器默认大小
private int theSize;
private E[] theItems; public MyArrayList(){
clear();
} public void clear(){
theSize = 0;
ensureCapacity(DEFAULT_SIZE);
} public int size(){
return theSize;
} public boolean isEmpty(){
return size() == 0;
} public void trimToSize(){
ensureCapacity(size());
} public E get(int idx){
if(idx<0||idx>=size())
throw new ArrayIndexOutOfBoundsException();
return theItems[idx];
} public E set(int idx,E newVal){
if(idx<0||idx>size())
throw new ArrayIndexOutOfBoundsException();
E old = theItems[idx];
theItems[idx] = newVal;
return old;
} public void ensureCapacity(int newCapacity) { //数组的扩展
if(newCapacity<theSize)
return;
E[] old = theItems;
theItems = (E[])new Object[newCapacity];
for(int i=0;i<size();i++){
theItems[i] = old[i];
}
} public boolean add(E x){
add(size(),x);
return true;
} public void add(int idx,E x){
if(theItems.length == size())
ensureCapacity(size()*2+1);
for(int i=theSize;i>idx;i--){
theItems[i] = theItems[i-1];
}
theItems[idx] = x;
theSize++;
} public E remove(int idx){
E removeItem = theItems[idx];
for(int i=idx;i<size()-1;i++){
theItems[i] = theItems[i+1];
}
theSize--;
return removeItem;
} public Iterator<E> iterator() {
return new ArrayListIterator();
} private class ArrayListIterator implements Iterator<E>{ //内部类
private int current = 0;
public boolean hasNext(){
return current<size();
}
public E next(){
if(!hasNext())
throw new NoSuchElementException();
return theItems[current++];
}
public void remove(){
MyArrayList.this.remove(--current);
}
}
}

Java中ArrayList的自我实现的更多相关文章

  1. java中ArrayList 、LinkList区别

    转自:http://blog.csdn.net/wuchuanpingstone/article/details/6678653 个人建议:以下这篇文章,是从例子说明的方式,解释ArrayList.L ...

  2. JAVA中ArrayList用法

    JAVA中ArrayList用法 2011-07-20 15:02:03|  分类: 计算机专业 |  标签:java  arraylist用法  |举报|字号 订阅     Java学习过程中做题时 ...

  3. Java中ArrayList与LinkedList的区别

    Java中ArrayList与LinkedList的区别 一般大家都知道ArrayList和LinkedList的区别: 1. ArrayList的实现是基于数组,LinkedList的实现是基于双向 ...

  4. Java中arraylist和linkedlist源代码分析与性能比較

    Java中arraylist和linkedlist源代码分析与性能比較 1,简单介绍 在java开发中比較经常使用的数据结构是arraylist和linkedlist,本文主要从源代码角度分析arra ...

  5. java中ArrayList 和 LinkedList 有什么区别

    转: java中ArrayList 和 LinkedList 有什么区别 ArrayList和LinkedList都实现了List接口,有以下的不同点:1.ArrayList是基于索引的数据接口,它的 ...

  6. Java中ArrayList相关的5道面试题

    本文参考了 <关于ArrayList的5道面试题 > 1.ArrayList的大小是如何自动增加的? 这个问题我想曾经debug过并且查看过arraylist源码的人都有印象,它的过程是: ...

  7. Java中ArrayList类详解

    1.什么是ArrayList ArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了如下一些好处: 动态的增加和减少元素 实现了ICollection和ILis ...

  8. Java中ArrayList源码分析

    一.简介 ArrayList是一个数组队列,相当于动态数组.每个ArrayList实例都有自己的容量,该容量至少和所存储数据的个数一样大小,在每次添加数据时,它会使用ensureCapacity()保 ...

  9. Java中ArrayList和LinkedList差别

    一般大家都知道ArrayList和LinkedList的大致差别: 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构.  2.对于随机訪问get和set.A ...

随机推荐

  1. 【linux基础】第九周作业

    1.详细描述一次加密通讯的过程,结合图示最佳. 加密通讯:A <--> B 1)A与 B通信,首先A.B双方都应该持有对方的公钥,即证书,并验证证书的合法性. 2)加密: i.     A ...

  2. 使用 Python 抓取欧洲足球联赛数据

    Web Scraping在大数据时代,一切都要用数据来说话,大数据处理的过程一般需要经过以下的几个步骤    数据的采集和获取    数据的清洗,抽取,变形和装载    数据的分析,探索和预测    ...

  3. Serverlet程序

    Serverlet是用Java编写的服务器端程序;主要用于交互地浏览和修改数据,生成动态Web内容; 一个serverlet就是一个继承于HttpServlet抽象类的Java类:下面先看一个简单的例 ...

  4. Emgu学习之(一)——Emgu介绍

    OpenCV“OpenCV是一个开源的计算机视觉库.OpenCV采用C/C++语言编写,可以运行在Linux/Windows/Mac等操作系统上.OpenCV还提供了Python.Ruby.MATLA ...

  5. DOM 元素 属性和方法

    console.dir() namespaceURI: "http://www.w3.org/1999/xhtml" nextElementSibling: null nextSi ...

  6. vm虚拟机自定义安装centOS找不到网卡

    问题:自定义简化安装后执行ifconfig无法找到eth0网卡 1.查看eth0网络配置: [root@minion1 ~]# cat /etc/sysconfig/network-scripts/i ...

  7. SQL injection

    SQL injection is a code injection technique, used to attack data-driven applications, in which malic ...

  8. struts2 + ajax + json的结合使用,实例讲解

    struts2用response怎么将json值返回到页面javascript解析,这里介绍一个struts2与json整合后包的用法. 1.准备工作 ①ajax使用Jquery:jquery-1.4 ...

  9. Javascript 将图片的绝对路径转换为base64编码

    Javascript将图片的绝对路径转换为base64编码 我们可以使用canvas.toDataURL的方法将图片的绝对路径转换为base64编码:在这我们引用的是淘宝首页一张图片如下: var i ...

  10. 不用插件直接同步wordpress文章日志到新浪微博

    社会化媒体营销可以为网站带来流量,如果你的社会化媒体账号的粉丝技术够大的话!社会化媒体营销国内做得比较好的算新浪微博了.那么我们要怎样同步wordpress文章日志到新浪微博呢?当然你可以使用插件来实 ...