我们先写一个SequenceList类,实现一些基本功能
代码:
import java.util.Iterator;
public class SequenceList<T> implements Iterable<T> {
private T[] eles;
private int N;
public SequenceList(int capacity){
//初始化数据
this.eles= (T[]) new Object[capacity];
this.N=0;
}
public void clear(){
//将一个线性表置为空表
this.N=0;
}
//判空
public boolean isEmpty(){
return N==0;
}
//表长
public int length(){
return N;
}
//获取i位置的值
public T get(int i){
return eles[i];
}
// 在指定位置插入值
public void insert(int i,T t){
for (int j = N; j >i; j--) {
eles[j]=eles[j-1];
}
eles[i]=t;
N++;
}
// 在指定位置删除值
public T remove(int i){
T n=eles[i];
for(int j=i;j<N-1;j++){
eles[j]=eles[j+1];
}
return n;
}
//寻找相同元素并输出索引,若无就返回-1
public int indexOf(T t){
for (int i = 0; i < N; i++) {
if(eles[i].equals(t)){
return i;
}
}
return -1;
}
@Override
public Iterator<T> iterator() {
return new SItertor();
}
private class SItertor implements Iterator<T>{
private int cusor;
public SItertor(){
this.cusor=0;
}
@Override
public boolean hasNext() {
return cusor<N;
}
@Override
public T next() {
return eles[cusor++];
}
}
}
然后,我们验证一下功能,写一个SequenceListTest类
public class SequenceListTest {
public static void main(String[] args) {
SequenceList<String> sl=new SequenceList<>(4);
sl.insert(0,"zouyuan");
sl.insert(1,"c罗");
sl.insert(2,"梅西");
for(String s:sl){
System.out.println(s);
}
}
}
使用foreach循环输出结果。
其实,线性表我们可以理解成一个存储小数组的大数组,我们对T赋值来确定大数组的数据类型。
调用方法来实现增删改查。这也是Java封装性的体现。
以上是个人观点,欢迎大佬指点。