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());
}
}

最新文章

  1. MVVM下listbox默认显示最后一行
  2. 数据结构与算法JavaScript (五) 串(经典KMP算法)
  3. C语言之函数可变参数
  4. Nodejs开源项目推荐
  5. 学习JS中的小问题
  6. HDU4907小技巧
  7. 2D转换
  8. libiconv_百度百科
  9. python学习day2
  10. 【第三篇】学习 android 事件总线androidEventbus之发布事件,子线程中接收
  11. 对于JSONObject,我只是临时抱佛脚
  12. vue实例属性的方法
  13. nginx搭建以及其配置文件
  14. 海量日志实时收集系统架构设计与go语言实现
  15. Excel 使用AutoFill提示“类Range的AutoFill方法无效”
  16. Uboot USB模式(RK3288变砖头的解决办法)
  17. Java的GUI设计小技巧
  18. Anaconda 科学计算环境与包的管理
  19. 总结: Sort 排序算法
  20. (转)spring boot整合redis

热门文章

  1. gdb的调试常用命令
  2. poj1220------高精度进制转换模板
  3. [Swift实际操作]七、常见概念-(10)使用UserDefaults和归档方式存取用户数据实际操作
  4. Python中线程与互斥锁
  5. (原创)确保JAVA线程安全的4种常用方法
  6. linux 从0开始
  7. PHP查找与搜索数组元素
  8. HBase定期备份
  9. LINUX 实现端口转发 - 安装使用rinetd
  10. HUE配置文件hue.ini 的database模块详解(包含qlite、mysql、 psql、和oracle)(图文详解)(分HA集群和非HA集群)