特别注意重写 toString()中的Arrays.copyOf (arr,N)使用,特别是copyOf,这个方法就是复制arr的前N个元素,返回新的数组。
/**
* 线性表之顺序表的创建
* 以数组为基础,创建一个顺序表
* 顺序表要实现的功能包括:
* 1、指定容量,创建顺序表
* 2、返回长度,即元素个数
* 3、插入、删除元素
* 4、根据索引获取元素
* 5、根据元素获取索引
* 6、判断是否为空
*/
import java.util.Arrays;
//<T>泛型表示支持任意类型
class SequenceList<T>{
// 成员变量,数组和元素个数
private T[] arr;
private int N;
//构造方法,传入容量初始化顺序表,
public SequenceList(int capacity) {
this.arr = (T[])new Object[capacity];
//注意不能是this.arr =new T[capacity];,只能强转化
//初始化元素个数为0
this.N = 0;
}
// 清除
public void clear(){
N=0;
}
// 判断是否为空
public boolean isEmpty(){
return N==0;
}
// 获取元素个数
public int length(){
return N;
}
// 获取,根据索引获得元素
public T get(int i){
return arr[i];
}
// 添加元素
public void append(T t){
arr[N++]=t;
//或者
//arr[N]=t;
//N++
}
// 在某个位置插入元素
public void insert(int i,T t){
//将i之后的元素后移一个位置
for (int index=N;index>i;index--){
arr[index]=arr[index-1];
}
// 插入,插入要N++
arr[i]=t;
N++;
}
// 删除某个位置的元素并返回这个值
public T remove(int i){
// 先保存这个元素
T cunrrent=arr[i];
// 如果是删除的尾部的元素
if(i==N-1){
N--;
// 如果删除非尾部元素
}else if(i<N-1){
// 循环将这个元素的后一个元素往前移动一个位置
for (int index=i;index<N-1;index++){
arr[index]=arr[index+1];
}
// 同时N--
N--;
}
return cunrrent;
}
// 查找,返回某个值的索引
public int indexOf(T t) {
for (int i = 0; i < N; i++) {
if (arr[i].equals(t)) {
return i;
}
}
// 如果没找到就返回-1
return -1;
}
// 为了输出好理解,重写 toString()
@Override
public String toString() {
// copyOf是复制arr的前N个元素,返回新的数组
return Arrays.toString(Arrays.copyOf (arr,N));
}
}
//测试
public class Test {
public static void main(String[] args) {
// 创建一个顺序表,容量为4
SequenceList<Object> list = new SequenceList<>(4);
// 添加元素元素
list.append(1);
list.append(2);
list.append(3);
// list.append(4);满了就不能再添加
System.out.println("添加元素后的顺序表"+list);
// 返回元素个数
int length1 = list.length();
System.out.println("元素个数"+length1);
// 插入元素,如果满了就不能再插入
list.insert(2, 100);
System.out.println("在指定处插入元素100后的顺序表"+list);
// 删除元素
Object remove = list.remove(1);
System.out.println("删除指定索引处的元素是"+remove);
System.out.println("删除元素后的顺序表"+list);
// 根据索引获得元素
System.out.println("获取指定索引处的元素是"+list.get(0));
// 返回某个值的索引
System.out.println("指定元素对应的索引为"+list.indexOf(100));
// 清空
list.clear();
System.out.println("清空元素后的顺序表"+list);
// 是否为空
System.out.println("判断是否为空"+list.isEmpty());
}
}
结果: