用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接口的一个非常重要的实现子类,它的底层是通过动态数组实现的,因此它具备查询速度快, ...
随机推荐
- 调整弹出对话框在ASP.NET应用程序的大小
调整弹出对话框在ASP.NET应用程序的大小 #region 调整弹出对话框在ASP.NET应用程序的大小 protected void PopupWindowControl_Customize ...
- Provisional headers are shown(一)
谷歌浏览器调试的时候,这个警告经常出现.但是每次产生的原因可能都是不一样的. 这篇文档记录我遇到的其中一次. 现象:一个并发的错误信息: CAUTION:request is not finished ...
- pandas set_index和reset_index的用法
1.set_index DataFrame可以通过set_index方法,可以设置单索引和复合索引. DataFrame.set_index(keys, drop=True, append=False ...
- pandas contact 之后,若要用到index列,要记得用reset_index去处理index
# -*- coding: utf-8 -*- import pandas as pd import sys df1 = pd.DataFrame({ 'A': ['A0', 'A1', 'A2', ...
- 统计重复字符串 如 eeefffkkkhjk 得到如下结果 3e3f3khjk;
//统计重复字符串 如 eeefffkkkhjk 得到如下结果 3e3f3khjk; string zipStr = Console.ReadLine(); var charList = zipStr ...
- python 操作redis之——有序集合(sorted set) (七)
#coding:utf8 import redis r =redis.Redis(host=") 1.Zadd 命令用于将一个或多个成员元素及其分数值加入到有序集当中.如果某个成员已经是有序 ...
- unity5, 在mac下多开
mac上app的多开与app本身无关,而是系统本身的功能,使用命令 open -n 就可以实现打开某应用程序的一个新实例(自行输入man open查看含义). 参考:http://mac-how-to ...
- JVM虚拟机(三):参数配置
在虚拟机运行的过程中,如果可以跟踪系统的运行状态,那么对于问题的故障排查会有一定的帮助,为此,虚拟机提供了一些跟踪系统状态的参数,使用给顶的参数执行java虚拟机,就可以在系统运行时打印相关日志,用于 ...
- //%f表示以十进制格式化输出浮点数 %.2f
//%f表示以十进制格式化输出浮点数 String s1 ="评分: %.1f"; String s2 = String.format(s1, 8.0); System.out.p ...
- ubuntu下禁用和恢复触摸板
1.一般禁用选项在 settings > mouse and touchpad 中.(16.04通过实验)如果无法禁用或者希望恢复,向下看. 2.命令行键入: xinput ,插卡touchpa ...