利用自己对ArrayList的理解,重写了Java的ArrayList工具类,旨在理解源码的精髓:

public class MyArrayList<T> {
//成员变量 
private Object a[]; //int型一维数组
private int size; //数组的元素个数
//构造器
public MyArrayList() {
a = new Object[0];
this.size = a.length;
}
//获取容器中元素个数
public int size() {
return size;
}
//判断容器是否为空
public boolean isEmpty(){
if( this.size == 0 ){
return true;
}else{
return false;
}
}
/**
* 功能: 添加元素
* @param value 接收新元素
*/
public void add( T value ){
size++; //元素个数增加一
Object[] temp = new Object[size];
//将a数组的所有元素复制到temp
System.arraycopy(a, 0, temp, 0, a.length);
temp[size-1] = value; //新元素放到最后面
a = temp; //让a记住新数组。
}
/**
* @function 删除元素
* @param loc 元素的索引号
* @return 是否删除成功
*/
public boolean delete(int loc){
if( loc < 0 || loc >= size ){
return false;
}else{
size--;
Object[] temp = new Object[size];
//loc之前的所有元素复制到temp中
System.arraycopy(a, 0, temp, 0, loc);
//loc之后的所有元素复制到temp中
System.arraycopy(a, loc+1, temp, loc, a.length-loc-1);
a = temp;
return true;
}
}
/**
* @function 修改指定位置上的元素值。
* @param loc 位置编号
* @param value 新值
* @return 是否修改成功
*/
public boolean set(int loc, T value ){
if( loc < 0 || loc >= size ){
return false;
}else{
a[loc] = value;
return true;
}
}
/**
* @function 插入新元素
* @param loc 插入的位置
* @param value 新元素
* @return 是否插入成功
*/
public boolean insert(int loc, T value ){
if( loc < 0 || loc > size ){
return false;
}else if( loc == size ){
this.add(value);
return true;
}else{
size++;
Object[] temp = new Object[size];
//复制a的loc之前的所有元素
System.arraycopy(a, 0, temp, 0, loc);
//复制之后的
System.arraycopy(a, loc, temp, loc+1, a.length-loc);
//新元素入位
temp[loc] = value;
a = temp;
return true;
}
}
//以字符串方式反馈所有元素
public String toString(){
StringBuilder vs = new StringBuilder();
vs.append("[");
for(int i = 0; i < size-1; i++ ){
vs.append( a[i] ).append(", ");
}
if( size != 0 ){
vs.append(a[size-1]).append("]");
}else{
vs.append("]");
}
return vs.toString();
}
}

用Java实现自己的ArrayList的更多相关文章

  1. Java中List,ArrayList、Vector,map,HashTable,HashMap区别用法

    Java中List,ArrayList.Vector,map,HashTable,HashMap区别用法 标签: vectorhashmaplistjavaiteratorinteger ArrayL ...

  2. Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  3. JAVA提高十:ArrayList 深入分析

    前面一章节,我们介绍了集合的类图,那么本节将学习Collection 接口中最常用的子类ArrayList类,本章分为下面几部分讲解(说明本章采用的JDK1.6源码进行分析,因为个人认为虽然JDK1. ...

  4. 【Java集合系列】---ArrayList

    开篇前言--ArrayList中的基本方法 前面的博文中,小编主要简单介绍java集合的总体架构,在接下来的博文中,小编将详细介绍里面的各个类,通过demo.对比,来对java集合类进行更加深入的理解 ...

  5. Java容器类List、ArrayList、Vector及map、HashTable、HashMap的区别与用法

    Java容器类List.ArrayList.Vector及map.HashTable.HashMap的区别与用法 ArrayList 和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数 ...

  6. 将java中数组转换为ArrayList的方法实例(包括ArrayList转数组)

    方法一:使用Arrays.asList()方法   1 2 String[] asset = {"equity", "stocks", "gold&q ...

  7. java集合系列之三(ArrayList)

    上一章,我们学习了Collection的架构.这一章开始,我们对Collection的具体实现类进行讲解:首先,讲解List,而List中ArrayList又最为常用.因此,本章我们讲解ArrayLi ...

  8. java集合框架03——ArrayList和源码分析

    最近忙着替公司招人好久没写了,荒废了不好意思. 上一章学习了Collection的架构,并阅读了部分源码,这一章开始,我们将对Collection的具体实现进行详细学习.首先学习List.而Array ...

  9. Java 中 Vector、ArrayList、List 使用深入剖析

    线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构.这些类均在java.util包中.本文试图通过简单的描述,向读者阐述各个类的作用以 ...

  10. java集合系列之ArrayList源码分析

    java集合系列之ArrayList源码分析(基于jdk1.8) ArrayList简介 ArrayList时List接口的一个非常重要的实现子类,它的底层是通过动态数组实现的,因此它具备查询速度快, ...

随机推荐

  1. 和求余运算巧妙结合的jns指令

    .text:004A78B1  and eax, 80000001h.text:004A78B6  jns short loc_4A78BD.text:004A78B8 dec eax.text:00 ...

  2. Web服务(Web Service)相关概念

    1.概述 Web服务技术(Web Service )是一种面向服务的架构技术,通过标准的Web协议提供服务,保证不同平台的应用服务能够互相操作. 因为Web服务公布的数据基于XML格式和 SOAP协议 ...

  3. vsftpd問題集

    vsftpd无法看到文件:226 Transfer done (but failed to open directory). 原因:目录不是一个 world_readable目录 解决方法:在配置文件 ...

  4. Linux硬盘速度测试的命令

    测试下硬盘的读写速度如何,在linux下可以使用hdparm 对硬盘进行测试或查看硬盘的相关信息. hdparm 命令进行硬盘速度测试.参数: -a 表示是否关闭磁盘预读取功能.对于大文件读取,这个显 ...

  5. 【Android】15.0 第15章 广播和通知—本章示例主界面

    分类:C#.Android.VS2015: 创建日期:2016-02-28 一.简介 广播(Broadcast):其功能类似于收音机的广播,你只要调到那个台(只要在接收的类中注册了要接收的广播),就能 ...

  6. initWithNibName和viewDidLoad执行顺序

    转自:http://justsee.iteye.com/blog/1626231 众所周知,IB在加载nib的过程中存在着一些undocument行为,有的行为确实是不可理喻的,因此程序员对IB产生了 ...

  7. 53. Reverse Words in a String【easy】

    Given an input string, reverse the string word by word. For example, Given s = "the sky is blue ...

  8. 图解Sysprep封装系统

    图解Sysprep封装系统     一.使用安装管理器工具创建 Sysprep.inf 应答文件 要安装“安装管理器”工具并创建应答文件,请按照下列步骤操作: 1)打开“我的电脑”,然后打开 Wind ...

  9. UIViewController的生命周期及iOS程序执行顺序 和ios6 处理内存警告

    当一个视图控制器被创建,并在屏幕上显示的时候. 代码的执行顺序1. alloc                                   创建对象,分配空间2.init (initWithN ...

  10. 如何在Windows下面运行hadoop的MapReduce程序

    在Windows下面运行hadoop的MapReduce程序的方法: 1.下载hadoop的安装包,这里使用的是"hadoop-2.6.4.tar.gz": 2.将安装包直接解压到 ...