java arraylist实现_JAVA自己实现ArrayList

ArrayList

内部用数组存放数据

数组的缺点:

长度不可变;

访问方式单一,只能用下表索引;

效率表现:访问任何位置 效率一样,增删数据效率降低

内部数组默认的初始容量10;

放满之后,容量1.5倍增长;减少数组创建提高效率;

e06d5650943ba6c1facc364f38bdca8e.png

package 集合.list.ArrayList;

import java.util.Arrays;

import java.util.Date;

public class MyArryList {

//定义一个空的数组

private final static Object[] myArray = {};

//定义一个默认长度10

private final static int default_length = 10;

Object[] elementData;

//myArryList长度

private int size = 0;

//无参数构造方法,默认容量10

public MyArryList() {

this.elementData = myArray;

}

//带参数构造函数

public MyArryList(int length) {

if (length < 0) {

throw new IllegalArgumentException("参数不能小于0");

}

this.elementData = new Object[length];

size = length;

}

//获取长度

public int getSize() {

return this.size;

}

//添加元素

public void add(Object args) {

//每次添加元素时需要考虑长度问题

//判断是否需要扩容

if (size >= elementData.length) {

this.grown();

}

elementData[size++] = args;

}

//扩容方法

private void grown() {

if (elementData.length <= 1) {

elementData = Arrays.copyOf(elementData, elementData.length + 1);

} else {

elementData = Arrays.copyOf(elementData, elementData.length + (elementData.length >> 1));

}

}

//删除元素

public void remove(Object obj) {

//先查找第一次出现的索引

int i = indexOf(obj);

if (i != -1) {

remove(i);

}

}

//删除指定索引位置元素

public void remove(int index) {

if (index < 0 || index > size) {

throw new IndexOutOfBoundsException("参数越界");

}

//遍历数组

//for(int i = index;i

// elementData[i]=elementData[i+1];

//}

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

size--;

}

//指定索引插入元素

public void insert(int index, Object obj) {

if (index < 0 || index > size) {

throw new IndexOutOfBoundsException("参数越界");

}

//

if (size >= elementData.length) {

this.grown();

}

//[1,2,3,4][1,2,5,3,4]第一种方式

// System.arraycopy(elementData,index, elementData,index-1,size-index);

//遍历数组

for (int i = size - 1; i >= index; i--) {

elementData[i + 1] = elementData[i];

}

//将需要插入元素放入指定索引位置

elementData[index] = obj;

size++;

}

//查找元素第一次索引

public int indexOf(Object obj) {

for (int i = 0; i < size; i++) {

if (elementData[i] == obj || elementData[i] != null && elementData[i].equals(obj)) {

return i;

}

}

return -1;

}

//更改元素

public void set(int index, Object obj) {

elementData[index] = obj;

}

//清空数据

public void clear() {

elementData = new Object[0];

size = 0;

}

//判断索引是否越界

public boolean out(int index) {

if (index < 0 || index > size) {

return false;

} else return true;

}

//判断是否包含

public boolean contains(Object obj) {

return indexOf(obj) != -1;

}

//判断是否为空

public boolean isEmpty() {

return size == 0;

}

//截取子列表

public MyArryList sublist(int fromIndex, int toIdex) {

if (fromIndex < 0 || toIdex > size) {

throw new IndexOutOfBoundsException("越界");

}

if (fromIndex > toIdex) {

throw new IllegalArgumentException();

}

MyArryList sublist = new MyArryList(toIdex - fromIndex);

System.arraycopy(elementData, fromIndex, sublist, 0, toIdex - fromIndex);

sublist.size = toIdex - fromIndex;

return sublist;

}

//toString重写

@Override

public String toString() {

Object[] newstring =new Object[size];

System.arraycopy(elementData, 0, newstring, 0, size);

return Arrays.toString(newstring);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值