概述
创建一个MyArrayList的类,并实现如下的方法:
//获取长度
int getSize();
//获取容量
int getCapacity();
//判断是否为空的方法
boolean isEmpty();
//添加元素的方法
void add(E data);
void add(int index,E data);
//删除元素的方法
E delete(int index);
E deleteFirst();
E deleteLast();
//获取元素下标的方法
int indexOf(E data);
//获取元素的方法
E get(int index);
//判断是否包含元素的方法
boolean contains(E data);
//修改元素的方法,返回原位置的元素
E set(int index , E data);
1.创建一个接口 MyCollection
public interface MyCollection<E> {
//获取长度
int getSize();
//获取容量
int getCapacity();
//判断是否为空的方法
boolean isEmpty();
//添加元素的方法
void add(E data);
void add(int index,E data);
//删除元素的方法
E delete(int index);
E deleteFirst();
E deleteLast();
//获取元素下标的方法
int indexOf(E data);
//获取元素的方法
E get(int index);
//判断是否包含元素的方法
boolean contains(E data);
//修改元素的方法,返回原位置的元素
E set(int index , E data);
}
2.创建接口MyIterator
public interface MyIterator<E> {
//判断是否有下一个元素
boolean hasNext();
//获取下一个元素
E next();
}
3.创建一个MyArrayList类实现MyCollection接口
public class MyArrayList<E> implements MyCollection<E>,MyIterator<E> {
private E[] datas;//存储数据数组
private MyIterator<E> iterator;//迭代器
private int size = 0;//元素个数
private int capacity = 0;//容量
//构造函数
public MyArrayList(E[] datas) {
super();
this.datas = datas;
this.size = datas.length;
}
public MyArrayList() {
this(10);
}
public MyArrayList(int capacity) {
this.datas = (E[]) new Object[capacity];
this.size = 0;
}
//iterator的相关API
public MyIterator iterator() {
this.iterator = new MyListIterator();
return this.iterator;
}
/**
* 判断是否有下一个元素的方法
*/
@Override
public boolean hasNext() {
return this.iterator.hasNext();
}
/**
* 获取下一个元素的方法
*/
@Override
public E next() {
return this.iterator.next();
}
//list的相关API
/**
* 获取元素个数的方法
*/
@Override
public int getSize() {
return this.size;
}
/**
* 获取容量的方法
*/
@Override
public int getCapacity() {
return this.capacity;
}
/**
* 判断是否为空的方法
*/
@Override
public boolean isEmpty() {
return this.size == 0;
}
/**
*添加元素的方法
*/
@Override
public void add(E data) {
this.add(size, data);
}
/**
* 添加元素的方法
*/
@Override
public void add(int index, E data) {
if (index < 0 || index > size) {
throw new IllegalArgumentException("你添加了一个错误的参数,取值范围在0-"+size+"之间,谢谢");
}
if (size == datas.length) {
resize(datas.length*2);
}
for (int i = size-1; i >= index; i--) {
datas[i+1] = datas[i];
}
datas[index] = data;
size++;
}
/**
* 重置容量的方法
* @param i
*/
private void resize(int i) {
E[] newdatas = (E[]) new Object[capacity];
for (int j = 0; j < size; j++) {
newdatas[i] = datas[i];
}
datas = newdatas;
}
/**
* 删除元素的方法
*/
@Override
public E delete(int index) {
if (index < 0 || index >= size) {
throw new IllegalArgumentException("你添加了一个错误的参数,取值范围在0-"+size+"之间,谢谢");
}
E result = datas[index];
int i = 0;
for (i = index; i < size; i++) {
datas[i] = datas[i+1];
}
this.size = i - 1;
return result;
}
/**
* 删除元素的方法
*/
@Override
public E deleteFirst() {
return this.delete(0);
}
/**
* 删除元素的方法
*/
@Override
public E deleteLast() {
return this.delete(size-1);
}
/**
* 查找元素的方法
*/
@Override
public int indexOf(E data) {
for (int i = 0; i < size; i++) {
if (datas[i] == data) {
return i;
}
}
return -1;
}
/**
* 获取元素的方法
*/
@Override
public E get(int index) {
if (index > 0 || index >= size) {
throw new IllegalArgumentException("你添加了一个错误的参数,取值范围在0-"+size+"之间,谢谢");
}
return datas[index];
}
/**
* 判断是否包含元素的方法
*/
@Override
public boolean contains(E data) {
for (int i = 0; i < size; i++) {
if (datas[i]==data) {
return false;
}
}
return false;
}
/**
* 修改元素的方法,返回原位置的元素
*/
@Override
public E set(int index, E data) {
if (index > 0 || index >= size) {
throw new IllegalArgumentException("你添加了一个错误的参数,取值范围在0-"+size+"之间,谢谢");
}
E result = datas[index];
datas[index] = data;
return result;
}
//内部类
class MyListIterator implements MyIterator<E> {
int index = 0;
int length = MyArrayList.this.datas.length;
//判断是否有下一个元素
@Override
public boolean hasNext() {
return index < length;
}
//获取下一个元素的方法
@Override
public E next() {
return MyArrayList.this.datas[index++];
}
}
}
最后
以上就是美好时光为你收集整理的创建一个自己的MyArrayList类,实现ArrayList的部分功能的全部内容,希望文章能够帮你解决创建一个自己的MyArrayList类,实现ArrayList的部分功能所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复