您的位置:首页 > 理论基础 > 数据结构算法

数据结构:自定义线性数组

2013-12-11 19:14 549 查看
package com.accp.list;

/**

* 接口

* @author Administrator

*

* @param <T>

*/

public interface MyList<T> {

//增加元素

public void add(T t);

//插入元素

public void insert(int index, T t);

//删除数组

public void remove(T t);

//删除指定位置的元素

public void removeAt(int index);

//获取数组的大小

public int size();

//判断数组是否为空

public boolean isEmpty();

//获取元素

public T get(int index);

//设置元素

public void set(int index, T t);

//获取指定位置的元素

public int indexOf(T t);

//清除数组

public void clear();

}

package com.accp.list;

/**

* 实现List的增、删、改、查操作

* @author Administrator

*

* @param <T>

*/

public class MyArrayList<T> extends MyAbstractList<T> {

private T[] list;

/**存储空间的大小*/

private int capacity;

public MyArrayList() {

this(10);

}

public MyArrayList(int capacity) {

this.capacity = capacity;

list = (T[]) new Object[capacity];

}

@Override

/**

* 添加元素:在尾部

*/

public void add(T t) {

ensureCapacity();

list[size++] = t;

}

@Override

/**

* 插入元素

*/

public void insert(int index, T t) {

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

throw new IndexOutOfBoundsException();

}

ensureCapacity();

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

list[i] = list[i - 1];

}

list[index] = t;

size++;

}

@Override

/**

* 删除元素

*/

public void remove(T t) {

int index = indexOf(t);

if (index != -1) {

removeAt(index);

}

}

@Override

/**

* 删除指定位置的元素

*/

public void removeAt(int index) {

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

throw new IndexOutOfBoundsException();

}

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

list[i] = list[i + 1];

}

size--;

}

@Override

/**

* 数组的大小

*/

public int size() {

return size;

}

@Override

/**

* 判断数组是否为空

*/

public boolean isEmpty() {

return size == 0;

}

@Override

/**

* 获取元素

*/

public T get(int index) {

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

throw new IndexOutOfBoundsException();

}

return list[index];

}

@Override

/**

* 设置指定位置元素的值

*/

public void set(int index, T t) {

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

throw new IndexOutOfBoundsException();

}

list[index] = t;

}

@Override

/**

* 清除数组:使数组的大小变为0

*/

public void clear() {

size = 0;

}

/**

* 追加存储的空间

*/

private void ensureCapacity() {

if (size == capacity) {

T[] temp = (T[]) new Object[capacity * 2];

capacity = capacity * 2;

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

temp[i] = list[i];

}

list = temp;

}

}

}

package com.accp.list;

/**

* 抽象类

* @author Administrator

*

* @param <T>

*/

public abstract class MyAbstractList<T> implements MyList<T> {

protected int size;

@Override

public int size() {

return size;

}

@Override

public boolean isEmpty() {

return size==0;

}

@Override

public int indexOf(T t) {

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

if (get(i).equals(t)) {

return i;

}

}

return -1;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: