利用自己对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();
}
}

最新文章

  1. MySQL安装与基本配置
  2. [LeetCode] Integer to Roman 整数转化成罗马数字
  3. (转)C# XMPP客户端与openfire通信(Matrix Xmpp 授权破解教程)
  4. Google Map API V3开发(1)
  5. SQL Server代理(1/12):配置和概况
  6. android之消息机制(二)
  7. 实用命令dd
  8. Scalding初探之二:动手来做做小实验
  9. 一、MyBatis简介与配置MyBatis+Spring+MySql
  10. ACM算法总结及刷题参考
  11. Linux X Window System运行原理和启动过程
  12. stasm+三角剖分
  13. 移动web开发的一些坑
  14. 进程ps、kill 、grep
  15. UITextView换行问题解决办法
  16. HTML 5 全局属性和事件属性
  17. uvalive 3971 - Assemble(二分搜索 + 贪心)
  18. [HNOI2010]PLANAR
  19. 【Teradata Utility】使用SQL Assistant导出导入数据
  20. python基础数据类型—int、bool、字符串的常用方法

热门文章

  1. [转载]最完整PHP.INI中文版
  2. freeswitch编译java esl
  3. Chrome 浏览器端口的坑:ERR_UNSAFE_PORT
  4. MYSQL服务器复制配置
  5. Unity3D安卓交互 - 使代码运行在UI线程
  6. Activiti工作流简单入门 (zhuan)
  7. Django教程:[33]从数据库生成模型
  8. MySQL 找回密码
  9. ashx上传姿势
  10. PHP——投票