package bh.shy.list;
import bh.shy.listconst.ListConst;
public class MyList<T> {
// 定义一个数组T
private T[] t;
private int length;
private int listSize;
// 获取顺序表的长度
public int getLength() {
return this.length;
}
// 获取顺序表的容量
public int getListSize() {
return this.listSize;
}
// 构造函数初始化一个包含100个元素的顺序表
@SuppressWarnings("unchecked")
public MyList() {
t = (T[]) new Object[ListConst.INIT_LIST_SIZE];
this.length = 0;
this.listSize = ListConst.INIT_LIST_SIZE;
}
@SuppressWarnings("all")
// 构造函数初始化一个指定容量的顺序表
public MyList(int listSize) {
t = (T[]) new Object[listSize];
this.length = 0;
this.listSize = listSize;
}
// 向顺序表指定位置插入数据插入数据
public int insert(int i, T t) {
// 判断i是否符合条件
if (i < 1 || i > this.length + 1) {
// 抛出一个角标越界异常提示用户
throw new RuntimeException("输入的i值不符合,注:i值从1开始");
}
// 判断数组空间是否充足
if (this.length >= this.listSize) {
// 如果不充足重新创建数组并且把之前数组中的值复制到新创建的数组中
@SuppressWarnings("unchecked")
T[] tmp = (T[]) new Object[this.listSize + ListConst.LISTINCREMENT];
// 把以前数组中的数元素复制到这个新创建的数组
for (int j = 0; j < length - 1; j++) {
tmp[j] = this.t[j];
}
// 把原数组指向变长的数组
this.t = tmp;
// 容量增加
this.listSize = this.listSize + ListConst.LISTINCREMENT;
}
// 把i后面的元素一次后移
for (int j = this.length - 1; j >= i - 1; --j) {
this.t[j + 1] = this.t[j];
}
// 插入数据
this.t[i - 1] = t;
length++;
return ListConst.OK;
}
// 向list元素中添加元素
public void add(T t) {
// 从第一个位置开始添加先判断集合的容量是否充足
if (this.length >= this.listSize) {
// 集合容量不充足,通过数组的复制方法添加容量
// 如果不充足重新创建数组并且把之前数组中的值复制到新创建的数组中
@SuppressWarnings("unchecked")
T[] tmp = (T[]) new Object[this.listSize + ListConst.LISTINCREMENT];
// 把以前数组中的数元素复制到这个新创建的数组
for (int j = 0; j < length; j++) {
tmp[j] = this.t[j];
}
// 把原数组指向变长的数组
this.t = tmp;
// 容量增加
this.listSize = this.listSize + ListConst.LISTINCREMENT;
}
// 像第一个位置添加元素
this.t[this.length] = t;
this.length++;
}
// 获取元素
public T get(int i) {
// 先判断传入的i值是否合理
if (i < 1 || i > this.length) {
// 抛出角标越界异常
throw new RuntimeException("角标越界,不存在该位置的元素");
}
// 如果存在该元素
return this.t[i - 1];
}
// 移除指定位置的元素
public T remove(int i) {
T result;
// 判断i值是否合格
if (i < 1 || i > this.length) {
throw new RuntimeException("角标越界,不存在该位置的元素!!!注:i值从1开始");
}
result = this.t[i - 1];
for (int j = i; j <= this.length - 1; j++) {
this.t[j - 1] = this.t[j];
}
this.length--;
return result;
}
}
package bh.shy.listconst;
public interface ListConst{
int INIT_LIST_SIZE = 10;
int LISTINCREMENT = 10;
int ERROR = 0;
int OK = 1;
}
数据结构-顺序表(java)
最新推荐文章于 2022-05-10 16:43:54 发布