用Java实现自己的ArrayList
利用自己对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的更多相关文章
- Java中List,ArrayList、Vector,map,HashTable,HashMap区别用法
Java中List,ArrayList.Vector,map,HashTable,HashMap区别用法 标签: vectorhashmaplistjavaiteratorinteger ArrayL ...
- Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
- JAVA提高十:ArrayList 深入分析
前面一章节,我们介绍了集合的类图,那么本节将学习Collection 接口中最常用的子类ArrayList类,本章分为下面几部分讲解(说明本章采用的JDK1.6源码进行分析,因为个人认为虽然JDK1. ...
- 【Java集合系列】---ArrayList
开篇前言--ArrayList中的基本方法 前面的博文中,小编主要简单介绍java集合的总体架构,在接下来的博文中,小编将详细介绍里面的各个类,通过demo.对比,来对java集合类进行更加深入的理解 ...
- Java容器类List、ArrayList、Vector及map、HashTable、HashMap的区别与用法
Java容器类List.ArrayList.Vector及map.HashTable.HashMap的区别与用法 ArrayList 和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数 ...
- 将java中数组转换为ArrayList的方法实例(包括ArrayList转数组)
方法一:使用Arrays.asList()方法 1 2 String[] asset = {"equity", "stocks", "gold&q ...
- java集合系列之三(ArrayList)
上一章,我们学习了Collection的架构.这一章开始,我们对Collection的具体实现类进行讲解:首先,讲解List,而List中ArrayList又最为常用.因此,本章我们讲解ArrayLi ...
- java集合框架03——ArrayList和源码分析
最近忙着替公司招人好久没写了,荒废了不好意思. 上一章学习了Collection的架构,并阅读了部分源码,这一章开始,我们将对Collection的具体实现进行详细学习.首先学习List.而Array ...
- Java 中 Vector、ArrayList、List 使用深入剖析
线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构.这些类均在java.util包中.本文试图通过简单的描述,向读者阐述各个类的作用以 ...
- java集合系列之ArrayList源码分析
java集合系列之ArrayList源码分析(基于jdk1.8) ArrayList简介 ArrayList时List接口的一个非常重要的实现子类,它的底层是通过动态数组实现的,因此它具备查询速度快, ...
随机推荐
- 使用maven创建一个例子
创建一个目录:D:\testmaven 在命令行中切换到D:\testmaven目录后输入: mvn archetype:generate 下载骨架,它会往本地工厂存信息 也可以直接使用带有参数的命令 ...
- Oracle常用单行函数(原创)
前言: 想把单行函数进行一个比较全面的总结,并分享给有需要的人,有不明之处还请多多指教. SQL函数:Oracle的内置函数,包括了单行函数和多行函数,本文重点讲解单行函数.单行函数又可以分为许多类, ...
- 实现简单容器模板类Vec(vector capacity 增长问题、allocator 内存分配器)
首先,vector 在VC 2008 中的实现比较复杂,虽然vector 的声明跟VC6.0 是一致的,如下: C++ Code 1 2 template < class _Ty, cl ...
- java项目部署后的文件路径获取
//eclipse部署工程 String path = request.getServletContext().getRealPath( File.separator+ "WEB-INF&q ...
- Nginx 安装与启动
安装 第一种安装方式:CentOS 7下配置 yum 安装 Nginx. 按照官方的安装实例:https://www.nginx.com/resources/admin-guide/ 第一步,在/et ...
- cygwin 运行java的一些记录
javac编译没问题,但是java执行就不行,处理方式如下 其实就是把宿主机下的java.exe在cygwin下搞一个快捷方式 关于路径问题,可以使用cygpath命令进行宿主机和cygwin间的转换 ...
- sed n/N使用说明
sed的语法格式: sed [option] {sed-command} {input-file} sed在正常情况下,将处理的行读入模式空间(pattern space),脚本中的“sed-comm ...
- sim900GPRS模块ppp拨号上网
--------------------------------------------- 主机操作系统:Centos 6.5 交叉编译器环境:arm-linux-gcc-4.5.4 开发板平台: F ...
- Spring学习11-Spring使用proxool连接池 管理数据源
Spring 一.Proxool连接池简介及其配置属性概述 Proxool是一种Java数据库连接池技术.是sourceforge下的一个开源项目,这个项目提供一个健壮.易用的连接池,最为关键的是 ...
- Visual Studio:error MSB8020
状况如下: error MSB8020: The builds tools for v120 (Platform Toolset = 'v120') cannot be found. To build ...