利用自己对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. 读写SQLServer数据库中的image类型数据(简单)

    1.将double类型的数据存储于image类型的变量中: (1). char *CManualForecastResultBll::DoubleArray2Binary(std::vector< ...

  2. EF6 Code First 模式更新数据库架构

    定义好实体类和上下文类 在 Package Manager Console 输入以下命令 1.Enable-Migrations 启用数据迁移功能,该命令通常会在项目根目录下生成 Migrations ...

  3. js ~取非运算符的妙用,将-1转为0(或假值)

    典型的运用场景就是indexOf

  4. Error-Project facet Java version 1.8 is not supported

    最近导入最新的Strtus2.5.10.1 Demo时出现了这个错误 解决方案如下: 选中工程——右键——Properties 然后依次展开找到如图所示内容,将1.8改成1.7即可. 原因:工程默认配 ...

  5. [na]华为acl(traffic-filter)和dhcp管理

    这个是财务网络的一个问题, 要求财务的某台机器能访问其他部门区的打印机. 其他部门是不能访问到财务网络的. 华为alc配置实例:-traffic-filter # 在VLAN100上配置基于ACL的报 ...

  6. Linux系统CPU频率调整工具使用

    现在的CPU耗电很大,按需调节CPU频率对普通桌面及移动设备节能有重要的意义,目前多数Linux发行版都已经默认启用了这个功能,但在一些像数据库,集群系统等特别需要CPU高性能的服务器环境中,Linu ...

  7. Selenium 之18 种定位方式

    1 id 定位 driver.find_element_by_id() HTML 规定id 属性在HTML 文档中必须是唯一的.这类似于公民的身份证号,具有很强的唯一性 from selenium i ...

  8. 把一张图片 转成二进制流 用AFNetworking POST 上传到服务器.

    把一张图片 转成二进制流 用AFNetworking POST 上传到服务器. AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOper ...

  9. python用time函数计算程序运行时间

    内置模块time包含很多与时间相关函数.我们可通过它获得当前的时间和格式化时间输出. time(),以浮点形式返回自Linux新世纪以来经过的秒数.在linux中,00:00:00 UTC, Janu ...

  10. python学习笔记(10)--爬虫下载煎蛋图片

    说明: 1. 有很多细节需要注意! 2. str是保留字,不要作为变量名 3. 保存为txt报错,encoding=utf-8 4. 403错误,添加headers的方法 5. 正则match只能从开 ...