基于数组实现线性表

所有线性表接口的定义:

/**

* 定义列表的接口,所有列表该实现的约定

* 增删改查

* @author Administrator

*

*/

public interface MyList {

/**

* 增加一个元素

* @param element

*/

void add(Object element);

/**

* 根据值,删除一个元素

* @param element

*/

void delete(Object element);

/**

* 根据下标删除一个元素

* @param index

*/

void delete(int index);

/**

* 根据下标更新一个元素

* @param index

* @param element

*/

void update(int index, Object element);

/**

* 判断线性表中是否包含该元素

* 返回布尔型

* @param element

* @return

*/

boolean contains(Object element);

/**

* 返回线性表中与该元素相等的值的下标

* 如果没有返回-1

* @param element

* @return

*/

int index(Object element);

}

public class _01MyArrayList implements MyList{

/**

* 线性表的定义:

* 基于数组实现线性表

* @param args

*/

private Object[] elements;//基于数组的数据结构

private int size = 0;//当前线性表中元素个数

private int capacity = 10;//线性表容量,初值为10

@Override

public String toString() {

StringBuilder sb = new StringBuilder("[");

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

sb.append(elements[i] + (i == size - 1?"]":" , "));

}

return sb.toString();

}

public _01MyArrayList(int capacity) {//自定义线性表容量

super();

this.capacity = capacity;

elements = new Object [capacity];

}

public _01MyArrayList() {//默认线性表容量

super();

elements = new Object [capacity];

}

@Override

public void add(Object element) {//开空间与拷贝都是耗时的操作

if(size == capacity) {//扩容,拷贝原数组元素

capacity += 20;

Object[] newArr = new Object[capacity];

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

newArr[i] = elements[i];

}

elements = newArr;

}

elements[size] = element;

size++;

}

@Override

public void delete(Object element) {

int index = index(element);

if(index >= 0)

delete(index);

}

@Override

public void delete(int index) {

//线性表重排,从删除位置依次向前更新,不更改原线性表排序

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

Object temp = elements[i];

elements[i] = elements[i+1];

elements[i+1] = temp;

}

elements[size - 1] = null;

size--;

}

@Override

public void update(int index, Object element) {

elements[index] = element;

}

@Override

public boolean contains(Object element) {

return index(element) >= 0;

}

@Override

public int index(Object element) {

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

if(elements[i].equals(element))

return i;

}

return -1;

}

}

你可能感兴趣的:(基于数组实现线性表)