java实现集合存放数组_JAVA 用数组实现 ArrayList

本文介绍了如何使用Java实现一个简单的ArrayList类,包括初始化数组、扩容机制、增删查改等基本操作。通过自定义的MyArrayList类,展示了无参和有参构造函数,以及add、remove、get、indexOf等方法的实现。
摘要由CSDN通过智能技术生成

packagecom.ys.collection;public classMyArrayList {//用于存储数据

private transient Object[] data = null;//集合的元素个数

private int size = 0;//定义一个常量为 10.(后面用于定义默认的集合大小)

private static final int DEFAULT_CAPACITY = 10;/***

* 有参构造函数

* 指定数组的大小

*@paramlength*/

public MyArrayList(intinitialCapacity){if(initialCapacity < 0){throw new IllegalArgumentException("非法的集合初始容量值 Illegal Capacity: "+initialCapacity);

}else{//实例化数组

this.data = newObject[initialCapacity];

}

}/***

* 无参构造函数

* 指定数组的初始大小为 10*/

publicMyArrayList(){this(DEFAULT_CAPACITY);

}/***

* 1、复制原数组,并扩容一倍

* 2、复制原数组,并扩容一倍,并在指定位置插入对象

*@paramindex

*@paramobj*/

public void checkIncrease(intindex,Object obj){if(size >=data.length){//实例化一个新数组

Object[] newData = new Object[size*2];if(index == -1 && obj == null){

System.arraycopy(data,0, newData, 0, size);

}else{//将要插入索引位置前面的对象 拷贝

System.arraycopy(data, index, newData, index+1, size-index);

}//将 newData 数组赋值给 data数组

data =newData;

newData= null;

}

}/***

* 获取数组的大小

*@return

*/

public intgetSize(){return this.size;

}/***

* 根据元素获得在集合中的索引

*@paramo

*@return

*/

public intindexOf(Object o) {if (o == null) {for (int i = 0; i < data.length; i++)if (data[i]==null)returni;

}else{for (int i = 0; i < data.length; i++)if(o.equals(data[i]))returni;

}return -1;

}/***

* 在尾部添加元素

*@paramobj

*@return

*/

public booleanadd(Object obj){//检查是否需要扩容

checkIncrease(-1, null);

data[size++] =obj;return true;

}/*** 判断给定索引是否越界

*@paramindex

*@return

*/

public boolean checkIndexOut(intindex){if(index > size || index < 0){throw new IndexOutOfBoundsException("指定的索引越界,集合大小为:"+size+",您指定的索引大小为:"+index);

}return true;

}public boolean add(intindex,Object obj){//如果给定索引长度刚好等于原数组长度,那么直接在尾部添加进去

if(index ==size){

add(obj);

}//checkIndexOut()如果不抛异常,默认 index <=size,且 index > 0

else if(checkIndexOut(index)){if(size

System.arraycopy(data, index, data, index+1, size-index);

data[index]=obj;

}else{//需要扩容

checkIncrease(index, obj);

}

size++;

}return true;

}/***

* 根据索引获得元素

*@paramindex

*@return

*/

public Object get(intindex){

checkIndexOut(index);returndata[index];

}/***

* 删除所有元素*/

public voidremoveAll(){for(int i = 0 ; i < data.length ; i++){

data[i]= null;

}

}/***

* 根据索引删除元素

*@paramindex

*@return

*/

public Object remove(intindex){if(index == size+1){throw new IndexOutOfBoundsException("指定的索引越界,集合大小为:"+size+",您指定的索引大小为:"+index);

}else if(checkIndexOut(index)){//保存对象

Object obj =data[index];if(index ==size){

data[index]= null;

}else{//将后边的数组向前移动一位

System.arraycopy(data, index+1, data, index, size-index);

}

size--;returnobj;

}return null;

}/***

* 删除指定的元素,删除成功返回 true,失败返回 false

*@paramobj

*@return

*/

public booleanremove(Object obj){for(int i = 0 ; i < size ; i++){if(obj.equals(data[i])){

remove(i);return true;

}

}return false;

}/***

* 在指定位置修改元素,通过索引,修改完成后返回原数据

*@paramindex

*@paramobj

*@return

*/

public Object change(intindex,Object obj){

checkIndexOut(index);

Object oldObj=data[index];

data[index]=obj;returnoldObj;

}/***

* 查看集合中是否包含某个元素,如果有,返回 true,没有返回 false

*@paramobj

*@return

*/

public booleancontain(Object obj){for(int i = 0 ; i < data.length ; i++){if(obj.equals(data[i])){return true;

}

}return false;

}public static voidmain(String [] args){

MyArrayList my= newMyArrayList();//System.out.println(my.data.length);

my.add(0,3);//System.out.println(my.getSize());

my.add(0,4);//System.out.println(my.getSize());

my.add(0,5);//my.removeAll();//my.remove(2);//System.out.println(my.get(2));

System.out.println(my.indexOf(null));

System.out.println(my.contain(2));for(int i = 0 ; i < my.data.length ; i++){

System.out.println(my.data[i]);

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值