手动实现一个简单的ArrayList
import org.omg.CORBA.PUBLIC_MEMBER; import java.io.Serializable;
import java.util.*;
import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.function.UnaryOperator;
import java.util.stream.Stream; public class MyArrayList<T> {
int size;
private Object array[];
private static final Object[] EMPTY_ARRAY={};
public MyArrayList()
{
this(10);
}
public MyArrayList(int initCapcity) {
if (initCapcity < 0)
throw new IllegalArgumentException("initCapcity必须大于0");
else if (initCapcity==0)
{
this.array=EMPTY_ARRAY;
}else {
array=new Object[initCapcity];
} }
public MyArrayList(Collection<? extends T> c)
{
array=c.toArray();
if((size=array.length)!=0)
{
if (array.getClass()!=Object[].class)
{
array=Arrays.copyOf(array,size,Object[].class);
}
}else {
this.array=EMPTY_ARRAY;
}
}
public boolean isEmpty()
{
return size==0;
} public int size() {
return size;
}
public boolean add(Object obj)
{
ensureCapacity();
array[size++]=obj;
return true;
}
public void add(int index,Object object)
{
rangeCheck(index);
ensureCapacity();
System.arraycopy(array,index,array,index+1,size-index);
array[index]=object;
size++; }
public Object remove(int index)
{
rangeCheck(index);
Object oldObject=array[index];
if (array.length-index-1>0)
{
System.arraycopy(array,index+1,array,index,array.length-index-1);
}
array[size--]=null;
return oldObject;
}
public boolean remove(Object object)
{
if (object==null)
{
for (int i=0;i<size;i++)
{
if (array[i]==null)
remove(i);
return true;
}
}else {
for (int i=0;i<size;i++)
{
if (object.equals(array[i]))
{
remove(i);
return true;
} }
}
return false;
} public Object get(int index)
{
rangeCheck(index);
return array[index];
}
public void set(int index,Object object)
{
rangeCheck(index);
Object oldObject=array[index];
array[index]=object;
}
//判断索引是否越界
public void rangeCheck(int index)
{
if (index>=size||index<0)
throw new IndexOutOfBoundsException("索引不在范围内");
} //数组容量与size相等时进行扩容
public void ensureCapacity()
{
if (size==array.length)
{
Object [] newArray=new Object[2*size+1];
System.arraycopy(array,0,newArray,0,array.length);
array=newArray;
}
}
}
测试类:
import java.util.ArrayList;
public class Demo1 {
public static void main(String[] args)
{
MyArrayList myArrayList=new MyArrayList<String>();
myArrayList.add("aaaaa");
myArrayList.add("bbbbb");
System.out.println(myArrayList.get(0));
System.out.println(myArrayList.get(1));
myArrayList.remove(0);
System.out.println(myArrayList.get(0));
myArrayList.set(0,"xujinfeng");
System.out.println(myArrayList.get(0));
System.out.println(myArrayList.size());
}
}

手动实现一个简单的ArrayList的更多相关文章
- 自己动手系列——实现一个简单的ArrayList
ArrayList是Java集合框架中一个经典的实现类.他比起常用的数组而言,明显的优点在于,可以随意的添加和删除元素而不需考虑数组的大小.处于练手的目的,实现一个简单的ArrayList,并且把实现 ...
- java学习之—实现一个简单的ArrayList
package thread1; /** * 实现一个简单的ArrayList * * @Title: uminton */ public class SimpleArrayList<T> ...
- 手动编写一个简单的loadrunner脚本
loadrunner除了自动录制脚本外,还可以手动编写脚本,通过右键+inset step添加步骤,还可以手动添加事务,集合点等 下面是一个简单的Action脚本,服务是运行在本机的flask服务: ...
- 手写网站服务器~用Python手动实现一个简单的服务器,不借助任何框架在浏览器中输出任意内容
写在前面的一些P话: 在公司网站开发中,我们往往借助于Flask.Django等网站开发框架去提高网站开发效率.那么在面试后端开发工程师的时候,面试官可能就会问到网站开发的底层原理是什么? 我们不止仅 ...
- js new一个对象的过程,实现一个简单的new方法
对于大部分前端开发者而言,new一个构造函数或类得到对应实例,是非常普遍的操作了.下面的例子中分别通过构造函数与class类实现了一个简单的创建实例的过程. // ES5构造函数 let Parent ...
- 原来热加载如此简单,手动写一个 Java 热加载吧
1. 什么是热加载 热加载是指可以在不重启服务的情况下让更改的代码生效,热加载可以显著的提升开发以及调试的效率,它是基于 Java 的类加载器实现的,但是由于热加载的不安全性,一般不会用于正式的生产环 ...
- 手动实现一个简易版SpringMvc
版权声明:本篇博客大部分代码引用于公众号:java团长,我只是在作者基础上稍微修改一些内容,内容仅供学习与参考 前言:目前mvc框架经过大浪淘沙,由最初的struts1到struts2,到目前的主流框 ...
- 手动实现一个 IOC/DI 容器
第一章为源码解析. 第二章为实现一个简单的 IOC 容器. 第三章进阶 Spring 插件开发. 手动实现一个 IOC/DI 容器 上一篇文章里我们已经对 Spring 的源码有了一个大概的认识,对于 ...
- [Java]使用HttpClient实现一个简单爬虫,抓取煎蛋妹子图
第一篇文章,就从一个简单爬虫开始吧. 这只虫子的功能很简单,抓取到”煎蛋网xxoo”网页(http://jandan.net/ooxx/page-1537),解析出其中的妹子图,保存至本地. 先放结果 ...
随机推荐
- 在Android中使用Protocol Buffers(上篇)
本文来自网易云社区. 总览 先来看一下 FlatBuffers 项目已经为我们提供了什么,而我们在将 FlatBuffers 用到我们的项目中时又需要做什么的整体流程.如下图: 在使用 FlatBuf ...
- java程序中获取kerberos登陆hadoop
本文由作者周梁伟授权网易云社区发布. 一般我们在使用kbs登陆hadoop服务时都直接在shell中调用kinit命令来获取凭证,这种方式简单直接,只要获取一次凭证之后都可以在该会话过程中重复访问.但 ...
- 网易云基于 Kubernetes 的深度定制化实践
本文由 网易云发布. 2017 年,Kubernetes 超越 Mesos 和 Docker Swarm成为最受欢迎的容器编排技术.网易云从 2015 下半年开始向 Kubernetes 社区贡献代 ...
- log4j学习(一)最简单的例子
前言: 之前笔者一直是在System.out中打日志的,由于笔者大部分时候是编写在tomcat容器里运行的一些个小web应用,所以这么做似乎没什么问题:打印出来的日志都可以在tomcat自己的log目 ...
- Process Class (System.Diagnostics)
import sys def hanoi(n, a, b, c): if n == 1: print('%c --> %c' % (a, c)) else: hanoi(n-1, a, c, b ...
- iOS 多Target, Other link Flag
在创建多个马甲包或者多个App间只有很小的差异是使用多Target是一种很好的方法 https://www.jianshu.com/p/18db54655246 1:选中原始的Target, 点击右键 ...
- Graph-684. Redundant Connection
In this problem, a tree is an undirected graph that is connected and has no cycles. The given input ...
- 比特、字节、K
比特(bit) 比特,计算机专业术语,是信息量单位,由英文BIT音译而来.BIT为Binary digit(二进制数)位的缩写.二进制数的一位所包含的信息就是一比特,如二进制数0100就是4比特. 字 ...
- php unset变量
<?php $a="abc"; $b="def"; unset($a,$b); echo $a."\n"; echo $b." ...
- sql日期格式处理
sql server中使用convert来取得datetime数据类型样式(全) 日期数据格式的处理,两个示例: CONVERT(varchar(16), 时间一, 20) 结果:2007-02-01 ...